打印

变量是volatile的,可变量的指针怎么也成了volatile ?

[复制链接]
6297|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
z_no1|  楼主 | 2013-5-8 14:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
volatile uint8_t   master_send_cache[DDJC_MAX_NUM*5+100];

master_rece_length=z8to16b(&master_rece_cache[2]);

warning:  #167-D: argument of type "volatile uint8_t *" is incompatible with arameter of type "uint8_t *"

当我对一个设定成volatile的全局变量取指针时,就会出这个提示,变量是volatile的,可变量的指针怎么也成了volatile ?老子英雄儿好汉吗?
沙发
sjnh| | 2013-5-8 14:53 | 只看该作者
指针不是volatile的,是指针指向的变量是volatile的

使用特权

评论回复
板凳
z_no1|  楼主 | 2013-5-8 15:01 | 只看该作者
volatile uchar *reg;
这行代码里volatile修饰的是指针所指的内容。所以这里定义了一个uchar类型的指针,并且这个指针指向的是一个volatile的对象。但是指针变量本身并不是volatile的。如果对指针变量reg本身进行计算或者赋值等操作,是可能会被编译器优化的。但是对reg所指向的内容 *reg的引用却禁止编译器优化。因为这个指针所指的是一个volatile的对象,所以编译器必须保证对*reg的操作都不被优化。通常在驱动程序的开发中,对硬件寄存器指针的定义,都应该采用这种形式。
/////////
楼上说的对,可是volatile不兼容有影响吗?

使用特权

评论回复
地板
杨爱林林| | 2013-5-8 15:39 | 只看该作者
你强制转换一下 应该不影响

使用特权

评论回复
5
hawksabre| | 2013-5-8 18:36 | 只看该作者
静态参数强制转换  应该问题不大  楼主   顶一个

使用特权

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

本版积分规则

223

主题

2644

帖子

10

粉丝