社区
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里的一位,其它七位都不用.
请问,以上程序正确否?
...全文
821
8
打赏
收藏
结构体里的volatile是什么意思
#pargma SBATA pw_timer struct{ uchar volatilef_delay:1; uchardummy:7; }pw_timer; 烦请问下,这里结构体里的volatile是什么意思? 这段程序,我是只想用到pw_timer里的一位,其它七位都不用. 请问,以上程序正确否?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
volatile 表示这个变量可能会在程序外改变,另外volatile修饰的变量不会进入cache
应该可以达到你的要求
AD7705模数转换
#include
#include
#include
#include "1KF01.h" #include "ad7705.h" #include "HC595.h" #include "main.h" #include "crc16.h" #include "usart.h"
volatile
uint16_t eep_cali_data_addr;//计算校准系数存放地址的变量 extern
volatile
uint8_t timer0out;//主函数定义的超时标志 extern
volatile
MODULE_INFO module_info;//主函数定义的模块信息
结构体
extern
volatile
ALL_CALI_DATA all_cali_data;//主函数定义的读取EEPROM校准数据的
结构体
extern
volatile
CHN_CALI_DATA module_cali_data[CALI_VALUE_NUM];//主函数定义的全局校准系数数组
关于typedef和struct对比
为什么要提出typedef的用法,因为相对于struct
结构体
使用起来更方便。下面就是他们之间的对比: struct
结构体
#include"stdio.h" struct Student { int sid; char name [100]; char sex; } int main(){ struct Student st; //定义
结构体
变量 struct Student * ps=&st; return 0; } 2.如果是typedef typedef int A ; //为int 再重新多取一个名字
浅谈C++中的mutable和
volatile
关键字
1.mutable 在C++中,mutable是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至
结构体
变量或者类对象为const,其mutable成员也可以被修改。mutable在类中只能够修饰非静态数据成员。 #include
using namespace std; class test { mutable int a; int b; public: test(int _a,int _b) :a(_a),b(_b){}; void fun() const //f
《C经典面试》编译链接、指针、内存bug、函数、其它
课程内容:1.编译链接:编译链接过程、预编译、存储类、生命周期、作用域、链接域等2.指针:指针概念、数组相关的指针、字符串指针、函数指针等3.内存bug:内存越位、内存覆盖、使用非法内存、内存泄露等。4.函数:自定义函数、内联函数、回调函数、变参函数、递归函数、库函数等5.其它:自动类型转换、数据溢出、
结构体
对齐、
volatile
、typedef、assert宏、逗号表达式、++/--等
Android中单例模式的一些坑小结
前言 单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。” 而我对单例的理解是,在可控的范围内充当全局变量的作用,就相当于C语言中一个全局
结构体
。 首先来看这样一个单例,稍微有点经验的同学可能都会说,这样的单例是非线程安全的。要加个
volatile
关键字才可以。 class Singleton{ private static Singleton singleton; private Singleton(){}; public static Singleton getInstance() { if
C语言
69,335
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章