语法错误,期望在编译8051微控制器的C代码时看到声明

时间:2014-11-18 16:37:19

标签: c 8051

我在用于8051微控制器的头文件中有一段C代码,如下所示 -

#define Sfr(x, y)       sfr x = y
#define Sbit(x, y, z)   sbit x = y^z
#define Sfr16(x,y)      sfr16 x = y

/*----------------------------------------*/
/* Include file for 8051 SFR Definitions  */
/*----------------------------------------*/

/*  BYTE Register  */

Sfr(P0 , 0x80);      
Sbit (P0_7 , 0x80, 7);
Sbit (P0_6 , 0x80, 6);

编译时,我收到错误line 17: syntax error, expecting declaration。 使用宏时有什么错误吗?

2 个答案:

答案 0 :(得分:0)

每次使用任何宏时,它都会反复声明相同的变量“x”。

还有 没有证据表明编译器知道sfirsbitsfr16是什么。

答案 1 :(得分:-1)

宏必须具有'('紧跟在宏名称之后。发布的代码在宏名称和'(')之间有一个空格。这就是编译器期望函数名称的原因。

此外,这些宏不适用于所有特殊功能寄存器(SFR),因为许多寄存器受读取影响,因此不能接受正常的读/修改/写入周期。 对于这样的寄存器,最好将寄存器的映像保存在RAM中。修改图像,然后写入整个寄存器。因此,SBIT宏不能用于所有特殊功能寄存器。 由于读取/修改/写入周期具有不良副作用,因此还可以使用哪些操作码来控制SFR中的位。