结构体里的volatile是什么意思

slisent 2008-09-10 03:07:21
#pargma SBATA pw_timer
struct{
uchar volatile f_delay :1;
uchar dummy :7;
}pw_timer;
烦请问下,这里结构体里的volatile是什么意思?

这段程序,我是只想用到pw_timer里的一位,其它七位都不用.
请问,以上程序正确否?
...全文
450 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
slisent 2008-09-11
  • 打赏
  • 举报
回复
谢谢了
可我昨天怎么发重复了
真是不好意思呢
bitxinhai 2008-09-10
  • 打赏
  • 举报
回复
防止编译器进行优化f_delay !!!
保证每次都是从内存中读取
而不是到cache中去读取
hotonion 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 k2eats 的回复:]
相对于const,volatile是可变的
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。
精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在寄存器里的备份。

你这样做语法上没有问题 但是寄存器不是以位为单位,你这样做起不到效果。可以这样试试:

#pargma SBATA pw_timer
struct{
uchar volatile f_d…
[/Quote]正解
backway 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 k2eats 的回复:]
相对于const,volatile是可变的
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。
精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在寄存器里的备份。

你这样做语法上没有问题 但是寄存器不是以位为单位,你这样做起不到效果。可以这样试试:

#pargma SBATA pw_timer
struct{
uchar volatile f_d…
[/Quote]

正解!
hyyuanqiang 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 k2eats 的回复:]
相对于const,volatile是可变的
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。
精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在寄存器里的备份。

你这样做语法上没有问题 但是寄存器不是以位为单位,你这样做起不到效果。可以这样试试:

#pargma SBATA pw_timer
struct{
uchar volatile…
[/Quote]

UP~k2eats
zclever 2008-09-10
  • 打赏
  • 举报
回复
楼主是在搞嵌入式的吧?
realdragon2 2008-09-10
  • 打赏
  • 举报
回复
UP~k2eats
K行天下 2008-09-10
  • 打赏
  • 举报
回复
相对于const,volatile是可变的
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。
精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在寄存器里的备份。

你这样做语法上没有问题 但是寄存器不是以位为单位,你这样做起不到效果。可以这样试试:

#pargma SBATA pw_timer
struct{
uchar volatile f_delay :1;
uchar :7;//添加填充比特,放到下一个字节,但是似乎这样做就没有必要使用位域了!
uchar dummy :7;
}pw_timer;

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧