一、意义;
二、使用场景;
三、嵌入式编程中经常用到 volatile这个关键字;
四、volatile与const; volatile与指针 ;
原创
2022-01-12 15:42:59
134阅读
emOsprey 鱼鹰谈单片机 2月21日预计阅读时间: 4 分钟 和 const 不同(关于 const 可以看 const 小节),当一个变量声明为 volatile,说明这个变量会被意想不到的改变。最为...
转载
2019-08-18 16:58:00
107阅读
2评论
遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。volatile 是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。下面是volatile变量的几个例子: 1).并行设备的硬件寄存器(如:状态寄存器) 2).一个中断服务子程序中会访问到的非自动变
原创
2011-06-23 15:53:00
602阅读
变量莫名其妙的不发生改变了,这是怎么回事?明明已经满足了条件,为啥还没动作?
转载
2022-01-05 09:36:11
105阅读
一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软
转载
2017-04-19 09:59:00
283阅读
关于const的用法,现在大概前前后后应该写了有两篇文章,以前学习的时候,用法体会不是那么深刻,为啥这么说呢
原创
2022-03-17 15:41:41
169阅读
volatile关键字在系统编程和嵌入式编程中非常重要,正确使用它可以确保程序在面对异步事件和并发访问时能够正常工作。
简单的说,就是不让编译器进行优化,即每次读取或者修改值的时候,都必须重新从内存或者寄存器中读取或者修改。 一般说来,volatile用在如下的几个地方: 1、中断服务程序中修改的供其它程序检测的变量需要加volatile; 2、多任务环境下各任务间共享的标志应该加volatile; 3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都
原创
2017-10-28 22:19:29
184阅读
简单的说,就是不让编译器进行优化,即每次读取或者修改值的时候,都必须重新从内存或者寄存器中读取或者修改。 一般说来,volatile用在如下的几个地方: 1、中断服务程序中修改的供其它程序检测的变量需要加volatile; 2、多任务环境下各任务间共享的标志应该加volatile; 3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都
原创
2022-04-02 10:23:13
74阅读
1.restrictC语言中的一种类型限定符(Type Qualifiers),用于告诉编译器,对象已经被指针所引用,不能通过除该指针外所有其他直接或间接的方式修改该对象的内容。restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其
原创
2021-07-12 10:31:19
802阅读
volatile描述volatile 是C和C++都支持的一个关键字,是一种类型修饰符。这个关键字被设计用来告诉编译器,一个变量可能会在程序之外被改变,例如,它可能被中断服务程序修改,或者它可能映射到一个硬件寄存器,这个寄存器的值可能由硬件改变。因此,编译器不应对涉及volatile变量的操作进行优化,因为这些优化可能会假设变量的值在两次访问之间不会改变。
需要注意的是,volatile并不能保证
原创
2023-12-07 11:21:08
170阅读
前言: 编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。 软件一级的 ...
转载
2021-07-25 15:18:00
245阅读
2评论
面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如 果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举 例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序: short fl
转载
2021-09-07 11:37:08
452阅读
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:
short flag;
vo
翻译
精选
2010-11-07 21:44:46
683阅读
点赞
这很重要在涉及DMA(直接内存访问)操作时,一些系统需要数据的特定对齐以进行高效的访问或者满足特定的硬件需求。综上所述
原创
2024-08-05 11:50:18
43阅读
volatile(英文解释:挥发性的,不稳定的)关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。使用该关键字的例子如下:int volatile nVint; 当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。例如:volatile int i=10;int a = i;...//其他代码,并未明确告诉编译器,对i进行过操作in..
转载
2012-07-15 14:05:00
78阅读
2评论
ET源码库的小伙伴会经常看到一个关键字volatile,那它在开发当中的作用是什么呢? 我们一起来看看官方文档里是怎么描述的,如下: “volatile 关键字指示一个字段可以
转载
2023-06-06 09:12:25
257阅读
一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cach
转载
2023-05-12 00:34:16
66阅读
优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水
转载
2023-05-15 01:09:58
65阅读