社区
C语言
帖子详情
结构体里的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里的一位,其它七位都不用.
请问,以上程序正确否?
...全文
497
8
打赏
收藏
结构体里的volatile是什么意思
#pargma SBATA pw_timer struct{ uchar volatilef_delay:1; uchardummy:7; }pw_timer; 烦请问下,这里结构体里的volatile是什么意思? 这段程序,我是只想用到pw_timer里的一位,其它七位都不用. 请问,以上程序正确否?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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;
c语言
volatile
结构体
,
volatile
的陷阱
本文探讨了C语言中
volatile
关键字在
结构体
中的应用,指出仅声明指针为
volatile
不足以确保所有成员的
volatile
特性。通过示例解释了如何正确地使数据结构的访问具备
volatile
属性,并强调了在代码维护中的重要性。同时,揭示了一个关于
volatile
指针的误解,解释了在特定情况下,对指针成员的直接赋值可能是未定义的行为,而通过指针访问数组元素才是保证
volatile
的。
c语言
volatile
结构体
,
volatile
一般用来修饰
结构体
中的成员变量吗?
本文详细介绍了C语言中的
volatile
关键字,强调了其在多线程环境中的作用,指出
volatile
用于指示变量的值可能在外部被改变,从而避免编译器的优化导致的问题。此外,还提及了其他相关关键字如auto、register、static、const和extern的用法和注意事项。
什么时候使用
volatile
关键字?
本文深入解析了C++中
volatile
关键字的作用及使用场景,解释了它如何防止编译器优化,确保变量的内存可见性,以及与atomic关键字的区别。同时,探讨了
volatile
在
结构体
中的应用和在多线程环境下的局限性。
结构体
类型、
结构体
变量和指针
本文介绍了C语言中
结构体
类型和
结构体
变量的定义与初始化方法,讲解了如何通过点运算符访问成员,并深入探讨了
结构体
指针在STM32等嵌入式系统中的关键作用,包括寄存器映射、内存访问及
volatile
关键字的应用。
volatile
的意义及用法(嵌入式STM32)
本文介绍STM32 GPIO库函数的构建过程,通过封装寄存器地址,使用
结构体
简化寄存器操作,提高代码可读性和可维护性。文章详细解释了如何定义GPIO及RCC外设的寄存器
结构体
,并使用
volatile
关键字确保寄存器值的实时更新。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章