社区
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里的一位,其它七位都不用.
请问,以上程序正确否?
...全文
927
8
打赏
收藏
结构体里的volatile是什么意思
#pargma SBATA pw_timer struct{ uchar volatilef_delay:1; uchardummy:7; }pw_timer; 烦请问下,这里结构体里的volatile是什么意思? 这段程序,我是只想用到pw_timer里的一位,其它七位都不用. 请问,以上程序正确否?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
e_sharp
2008-09-10
打赏
举报
回复
UP
slisent
2008-09-10
打赏
举报
回复
谢谢楼上各位的解答了
LiTuX
2008-09-10
打赏
举报
回复
csdn果然人才济济,得,我基本上没的说了……
lbh2001
2008-09-10
打赏
举报
回复
若只用一位,干脆其他的匿名
#pargma SBATA pw_timer
struct
{
uchar volatile f_delay :1;
uchar :7;
}pw_timer;
在程序外会改变的意思
比如那位代表端口,时钟等,直接由外部改变
不一定受你程序的控制
xkyx_cn
2008-09-10
打赏
举报
回复
volatile 的含义
volatile总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以死代码消除。但有时这些优化不是程序所需要的,这时可以用volatile关键字禁止做这些优化,volatile的字面含义是易变的,它有下面的作用:
1 不会在两个操作之间把volatile变量缓存在寄存器中。在多任务、中断、甚至setjmp环境下,变量可能被其他的程序改变,编译器 自己无法知道,volatile就是告诉编译器这种情况。
2 不做常量合并、常量传播等优化,所以像下面的代码:
volatile int i = 1;
if (i > 0) ...
if的条件不会当作无条件真。
3 对volatile变量的读写不会被优化掉。如果你对一个变量赋值但后面没用到,编译器常常可以省略那个赋值操作,然而对Memory Mapped IO的处理是不能这样优化的。
slisent
2008-09-10
打赏
举报
回复
可我只要用到一位,就相当于,我一直都只需用1位
这是不是就代表在程序外不会改变啊?
还是说,我用的那个位是用来做标志位,所以它有0和1两种情况
那就代表它在程序外会改变?
我就是不大明白,在程序外会改变的意思
mifeixq
2008-09-10
打赏
举报
回复
避免编译器优化
xkyx_cn
2008-09-10
打赏
举报
回复
1
volatile 表示这个变量可能会在程序外改变,另外volatile修饰的变量不会进入cache
应该可以达到你的要求
关于
结构体
指针类型的强制转换
###
结构体
指针类型的强制转换 #### 一、引言 在STM32嵌入式系统的开发过程中,经常需要对硬件寄存器进行直接操作,以实现对GPIO(General Purpose Input/Output,通用输入输出)等外设的精确控制。在C语言编程中...
AD7705模数转换
volatile
uint16_t eep_cali_data_addr;//计算校准系数存放地址的变量 extern
volatile
uint8_t timer0out;//主函数定义的超时标志 extern
volatile
MODULE_INFO module_info;//主函数定义的模块信息
结构体
extern...
MISRA-C:指针、
结构体
、联合体的安全规范
### MISRA-C:指针、
结构体
、联合体的安全规范 #### 指针、
结构体
和联合体的安全规范概述 MISRA-C标准旨在确保嵌入式系统中使用的C语言代码的质量和安全性。该标准特别关注指针、
结构体
和联合体的使用,因为这些...
101-FreeRTOS202212 - 任务控制块
结构体
定义
volatile
StackType_t *pxTopOfStack; /* 指向任务堆栈上最后一个项目的位置 */ #if ( portUSING_MPU_WRAPPERS == 1 ) xMPU_SETTINGS xMPUSettings; /* MPU 设置,定义在端口层 */ #endif ListItem_t ...
【C语言】
Volatile
的陷阱
这行代码
里
,
volatile
修饰的是 reg 这个变量,指针变量本身是
volatile
的,但指针所指的内容却不是
volatile
的。这种写法通常用在对共享指针的声明上,以确保指针变量的值总是从内存中载入的。 其次,
volatile
...
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章