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

[复制链接]
6910|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 | 显示全部楼层
你强制转换一下 应该不影响
hawksabre 发表于 2013-5-8 18:36 | 显示全部楼层
静态参数强制转换  应该问题不大  楼主   顶一个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

225

主题

2659

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部