我在用于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
。
使用宏时有什么错误吗?
答案 0 :(得分:0)
每次使用任何宏时,它都会反复声明相同的变量“x”。
还有 没有证据表明编译器知道sfir
或sbit
或sfr16
是什么。
答案 1 :(得分:-1)
宏必须具有'('紧跟在宏名称之后。发布的代码在宏名称和'(')之间有一个空格。这就是编译器期望函数名称的原因。
此外,这些宏不适用于所有特殊功能寄存器(SFR),因为许多寄存器受读取影响,因此不能接受正常的读/修改/写入周期。 对于这样的寄存器,最好将寄存器的映像保存在RAM中。修改图像,然后写入整个寄存器。因此,SBIT宏不能用于所有特殊功能寄存器。 由于读取/修改/写入周期具有不良副作用,因此还可以使用哪些操作码来控制SFR中的位。