Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
08/24/07 07:16
Modified:
  08/24/07 08:20

Read: times


 
#143576 - This is a really bad idea!
Responding to: ???'s previous message
Jacob Boyce said:

	ACC =1;
	Blink_func (); /* blink at a 0.5 second interval */


	ACC =3;
	Blink_func (); /* blink at a 1.0 second interval */

This is a Really Bad Idea!

As I said earlier in this thread,
It is not safe to assume that an assignment made in 'C' (ie, outside the #pragma ASM) won't have been "interfered with" by the time you get into the inline assembler.
http://www.8052.com/forum/read.phtml?id=143387

The same applies to setting ACC in 'C' before calling your assembler functions!

If you want to pass parameters to your assembler functions, you must do it via the compiler's Calling Convention - or use properly defined global variables.

You have absolutely no guarantee whatsoever that the compiler won't have used ACC for its own purposes during the calling process...
You may have got lucky this once, but you must not rely upon it!

[update]
I'll put together an example of the complete process - watch this space...

List of 39 messages in thread
TopicAuthorDate
C function with embeded ASM            01/01/70 00:00      
   You can call ASM from C...            01/01/70 00:00      
      I know nothing of Keil...            01/01/70 00:00      
         thanks            01/01/70 00:00      
      It seems to work.            01/01/70 00:00      
         Inelegant!            01/01/70 00:00      
            thanks for the article            01/01/70 00:00      
               I have certain examples available ...            01/01/70 00:00      
                  Make it public?            01/01/70 00:00      
                  Keil example            01/01/70 00:00      
                     It is a complete project with different files.            01/01/70 00:00      
                        Code library            01/01/70 00:00      
                           thanks!!!            01/01/70 00:00      
                              re;assembly language            01/01/70 00:00      
                                 ASM instructions in C            01/01/70 00:00      
                                    No, don\'t do that!            01/01/70 00:00      
                                 This is a really bad idea!            01/01/70 00:00      
                                    re;bad idea            01/01/70 00:00      
                                    re:bad idea II            01/01/70 00:00      
                                       The Best way is the C way            01/01/70 00:00      
   re: best way            01/01/70 00:00      
      Why not parameter passing?            01/01/70 00:00      
      What Compiler            01/01/70 00:00      
         re:parameter passing            01/01/70 00:00      
            Yes, but why?            01/01/70 00:00      
               re:            01/01/70 00:00      
               re:why            01/01/70 00:00      
                  Yes, But            01/01/70 00:00      
                  Parameter Passing R6, R7            01/01/70 00:00      
                     re:parameter passing using #pragma NOREGPARMS            01/01/70 00:00      
            REGPARMS/NOREGPARMS            01/01/70 00:00      
               re:NOREGPARMS            01/01/70 00:00      
                  ... and you always can use a global variable ...            01/01/70 00:00      
                     ???            01/01/70 00:00      
                        who said external???            01/01/70 00:00      
                           I            01/01/70 00:00      
                           re:??? 2            01/01/70 00:00      
                        re:???            01/01/70 00:00      
                           As long as you are aware of the issues.            01/01/70 00:00      

Back to Subject List