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

Reply via email to