打印
[51单片机]

关于51核KEIL4里面修饰符的前后顺序

[复制链接]
898|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qhtflsw|  楼主 | 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).
如果是数组呢?

相关帖子

沙发
qhtflsw|  楼主 | 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];
这样没报错

使用特权

评论回复
板凳
airwill| | 2018-8-9 16:40 | 只看该作者
xdata int data *p;  这个确实是让人理解比较困难的.
这个问题得查编译器手册, 不过我有之前的老的手册也没有讲明白

使用特权

评论回复
地板
ayb_ice| | 2018-8-10 08:52 | 只看该作者
一个是老写写法,现在为了规范不支持了

使用特权

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

本版积分规则

59

主题

164

帖子

4

粉丝