Hi, Keil uses a very strange symbols (^, =) to define a bit in an sfr. To standard C they mean 'xor' and 'assign' and thus SDCC treats them as such.
sbit P10 = P1^0; SDCC sees a definition of an sbit called P10 and it is INITIALIZED with the value of P1 XOR 0x00. The value of sfr P1 is not constant. For a proper definition of the sbit see the SDCC manual how SDCC expects things. Maarten > Hi Donald, > > The keyword 'sbit' is used to define special function bits, much like > the keyword 'sfr' for the special function registers. The good news is > that most of the SFRs in 8051 are already defined in <8051.h> Thus to > set the 4th bit of PORT-2 to 0, use the following code: > > #include <8051.h> > > void main (void) > { > P2_3 = 0; // P2_0 is the first bit of port 2 > } > > This is not standard C. Thus Keil and SDCC may follow different > conventions. > > Krish > > 2011/3/22 duck donal <tangtao87657...@gmail.com>: >> Hi All, >> I'm a newbie for sdcc. >> A few days ago, I was in use of SDCC, ran into a problem. >> >> Program (bee.c) is very simple, as follows: >> #include<reg51.h> >> #include<stdio.h> >> sbit P10=P1^0; >> sbit P17=P1^7; >> int main(void) >> { >> unsigned char j; >> unsigned int i; >> while(1){ >> P17=1; >> while(P17==0) >> { >> for(i=1;i<=500;i++) >> { >> P10=~P10; >> for(j=0;j<=50;j++); >> } >> for(i=1;i<=250;i++) >> { >> P10=~P10; >> for(j=0;j<=100;j++); >> } >> } >> } >> return 0; >> } >> My compiler option was sdcc -mmcs51 bee.c >> But SDCC gave me such an error message : bee.c:3:error >> 2:Initializer >> element is not constant >> >> bee.c:4:error 2:Initializer element is not constant >> It means the expression: sbit P10=P1^0 was wrong. >> I used keil C running the program,it compiled successfully,no >> errors,no warnings. >> Later,I got other programs to compile with SDCC.I found that where >> there is sbit instructions, there is error 2:Initializer element is not >> constant >> But keil C still can compile successfully. >> So,what is the solutions?To modify the program?How to do it? Or >> modify >> the sdcc? >> thanks£¡ >> Donald >> >> ------------------------------------------------------------------------------ >> Enable your software for Intel(R) Active Management Technology to meet >> the >> growing manageability and security demands of your customers. Businesses >> are taking advantage of Intel(R) vPro (TM) technology - will your >> software >> be a part of the solution? Download the Intel(R) Manageability Checker >> today! http://p.sf.net/sfu/intel-dev2devmar >> _______________________________________________ >> Sdcc-user mailing list >> Sdcc-user@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/sdcc-user >> >> > > ------------------------------------------------------------------------------ > Enable your software for Intel(R) Active Management Technology to meet the > growing manageability and security demands of your customers. Businesses > are taking advantage of Intel(R) vPro (TM) technology - will your software > be a part of the solution? Download the Intel(R) Manageability Checker > today! http://p.sf.net/sfu/intel-dev2devmar > _______________________________________________ > Sdcc-user mailing list > Sdcc-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/sdcc-user > ------------------------------------------------------------------------------ Enable your software for Intel(R) Active Management Technology to meet the growing manageability and security demands of your customers. Businesses are taking advantage of Intel(R) vPro (TM) technology - will your software be a part of the solution? Download the Intel(R) Manageability Checker today! http://p.sf.net/sfu/intel-dev2devmar _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user