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 <[email protected]>:
>> 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
>> [email protected]
>> 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
> [email protected]
> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user