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/06 21:48
Read: times


 
#122968 - False economy
Responding to: ???'s previous message
Jon Ledbetter said:
So if I do:
#define SW1 P_4;
Then later in a proceedure or function I can do:
Sw1 = 1;      // turn on port
delay(20);    // delay
SW1 = 0;      // turn off port
But this doesn't work.

It doesn't work because it is not correct!

For a start, 'C' is case-sensitive - so SW1 and Sw1 are not equivalent!

When you use a #define, it works like this:
#define <name> <text>
Then, wherever the preprocessor sees <name>, it simply replaces it with <text>

In your code above,
  • <name> is SW1
  • <text> is P_4; - including the semicolon!


    Thus, after preprocessing, your code becomes (assuming that you intended SW1 in both cases):
    P_4; = 1;      // turn on port
    delay(20);     // delay
    P_4; = 0;      // turn off port
    and the error is immediately obvious!
    See: http://www.8052.com/forum/read.phtml?id=29152

    I have several references for C, but most use Keil code.

    This is basic, plain vanilla, bog-standard 'C' - nothing to do with Keil, SDCC, or any other specific implementation!

    As has already been mentioned, you need to learn the basic 'C' language first, before worrying about the extensions offered by Keil, SDCC, etc...


  • List of 32 messages in thread
    TopicAuthorDate
    SDCC Nooby Question            01/01/70 00:00      
       Ok got it            01/01/70 00:00      
          it\'s ok in Keil            01/01/70 00:00      
             Yes...            01/01/70 00:00      
                The reason is...            01/01/70 00:00      
                   C first            01/01/70 00:00      
                      Learning C            01/01/70 00:00      
                         if this is cut and paste then            01/01/70 00:00      
                            Semi-colon was it            01/01/70 00:00      
                               C is fidgety about error declaration            01/01/70 00:00      
                               Syntax error            01/01/70 00:00      
                                  Going back and looking...            01/01/70 00:00      
                                     It means            01/01/70 00:00      
                                        Preprocessor output            01/01/70 00:00      
                                     explanation            01/01/70 00:00      
                            Semicolon            01/01/70 00:00      
                               yes, Andy you are absolutely correct            01/01/70 00:00      
                                  Semicolon - example            01/01/70 00:00      
                               backwards            01/01/70 00:00      
                                  HUH?            01/01/70 00:00      
                                     try this            01/01/70 00:00      
                         Dallas app notes            01/01/70 00:00      
                         False economy            01/01/70 00:00      
                            OK            01/01/70 00:00      
                         Learning from the tools            01/01/70 00:00      
                            #define and the preprocessor            01/01/70 00:00      
                               are you sure?            01/01/70 00:00      
                                  Yes!            01/01/70 00:00      
                               Hmmm...            01/01/70 00:00      
       SDCC Manual            01/01/70 00:00      
          Err... ya think?            01/01/70 00:00      
             Looks clear enough to me            01/01/70 00:00      

    Back to Subject List