打印
[学习资料]

移至一份arm程序到51,遇到问题,花了一天解决了

[复制链接]
496|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
598330983|  楼主 | 2025-6-6 19:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 等可能与库冲突)

使用特权

评论回复
沙发
598330983|  楼主 | 2025-6-6 19:13 | 只看该作者
建议的变量命名规则
避免使用单字母或短单词(如 data、code、p),改用描述性名称:

✅ fontData 代替 data

✅ memBuffer 代替 buffer

添加前缀/后缀 区分用途:

pData 表示指针(Pointer)

u8Value 表示 8 位无符号数

检查编译器手册:不同编译器(如 SDCC、IAR)可能有额外保留字。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

263

主题

5556

帖子

22

粉丝