[51单片机] 关于51核KEIL4里面修饰符的前后顺序

[复制链接]
289|3
 楼主 | 2018-8-9 14:15 | 显示全部楼层 |阅读模式
听说中断里面容易被优化,要加volatile,串口中断里需要用到数据,在外面定义一个数组。
volatile unsigned char xdata Rx_Buff[10];
这样就没问题,但是换成
volatile xdata unsigned char Rx_Buff[10];
就报错,SOURCE\API_COMM.C(131): error C141: syntax error near 'unsigned'
想知道这里的顺序是如何排列的?编译器如何识别错误的排列次序?
如果是指针,那么XDATA的位置确实会影响存储的位置。
xdata int data *p;
is a pointer (stored in xdata) that points to an integer (stored in data).
如果是数组呢?

 楼主 | 2018-8-9 14:28 | 显示全部楼层
本帖最后由 qhtflsw 于 2018-8-9 14:38 编辑

[Memory space] [Data type] Variable_name

may not be supported in future versions of the compiler

奥,应该是编译器不支持老的定义方法了。识别出来报错了,不过单个变量非数组的又不报错?

用结构体,好像又可以。。。竟然没报错。。

typedef struct zone_struct
{
    unsigned char  Power;
    unsigned short Timer
}
TypeDef_Zone;
xdata TypeDef_Zone    Zone[5];
这样没报错
| 2018-8-9 16:40 | 显示全部楼层
xdata int data *p;  这个确实是让人理解比较困难的.
这个问题得查编译器手册, 不过我有之前的老的手册也没有讲明白
| 2018-8-10 08:52 | 显示全部楼层
一个是老写写法,现在为了规范不支持了
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /2 下一条

快速回复 返回顶部 返回列表