Keil C251/C51 关键字列表(应避免用作变量名)
在 Keil C251/C51 开发中,以下关键字具有特殊含义(存储类别、寄存器名、指令等),不能用作变量名或结构体成员名,否则会导致编译错误或移植问题:
1. 存储类别关键字(Memory Space Specifiers)
这些关键字用于指定变量的存储位置:
[td]关键字 | 说明 | 示例 | data | 直接寻址的内部 RAM(0-127B) | unsigned char data var; | idata | 间接寻址的内部 RAM(0-255B) | unsigned char idata var; | xdata | 外部扩展 RAM(64KB) | unsigned int xdata var; | pdata | 分页外部 RAM(256B) | unsigned char pdata var; | code | 程序存储器(Flash/ROM) | const unsigned char code table[] = {...}; | bdata | 可位寻址的内部 RAM(20H-2FH) | unsigned char bdata flags;
|
2. 特殊功能寄存器(SFR)关键字
8051 的特殊寄存器名,如:
sfr P0 = 0x80; // 端口0
sfr P1 = 0x90; // 端口1
sfr SP = 0x81; // 堆栈指针
sfr PSW = 0xD0; // 程序状态字
3. 位寻址关键字
关键字 说明
bit 定义位变量
sbit 定义特殊功能寄存器的位
sbit LED = P1^0; // 定义 P1.0 为 LED
bit flag = 0; // 定义一个位变量
4. 其他保留关键字
关键字 冲突场景
interrupt 中断函数修饰符
using 指定中断使用的寄存器组
reentrant 可重入函数修饰符
_at_ 绝对地址定位(如 int x _at_ 0x8000;)
5. 跨平台移植注意事项
如果代码需要移植到其他平台(如 STM32、ESP32),还需避免:
C/C++ 标准关键字(如 class、new、delete 等)
平台专用关键字(如 ARM 的 __irq、STM32 HAL 的 GPIO_Pin)
常见冲突名称(如 count、buffer、addr 等可能与库冲突)
|