打印
[其它]

单片机volatile关键字的作用

[复制链接]
楼主: rosemoore
手机看帖
扫描二维码
随时随地手机跟帖
21
chenci2013| | 2023-10-8 13:04 | 只看该作者 回帖奖励 |倒序浏览
volatile关键字会使编译器不能进行任何可能的优化,包括推导出的立即值,所以它可以保证在处理器高速运行,而内存访问可能滞后的情况下,最近的值会被用到。

使用特权

评论回复
22
sdlls| | 2023-10-8 13:19 | 只看该作者
如果不使用 volatile 关键字,编译器可能会认为某个变量的值在某段代码中没有被改变,因此可以将读取操作缓存到寄存器中,或者将多个读取操作合并为一个,从而可能导致不正确的行为。

使用特权

评论回复
23
fengm| | 2023-10-8 13:32 | 只看该作者
volatile关键字可以用来修饰变量,表明这些变量可能会被未知的因素更改

使用特权

评论回复
24
cemaj| | 2023-10-8 13:48 | 只看该作者
当多个volatile语句具有相同的有效地址并且没有顺序依赖关系时,编译器可以将它们合并为一个访问。但是,volatile关键字会禁止这种合并,以确保每个指令都是独立的。

使用特权

评论回复
25
saservice| | 2023-10-8 13:59 | 只看该作者
通过使用volatile关键字,可以保证变量的实时性,即变量的值在程序运行过程中不会被意外改变。

使用特权

评论回复
26
sesefadou| | 2023-10-8 14:11 | 只看该作者
使用volatile声明的变量不会被缓存在寄存器或者对其他处理器不可见的地方。这意味着每次读写这个变量,系统都会从主内存中读取数据,而不是从缓存中。这样可以确保其他线程在访问这个变量时,都能获取到最新的数据。

使用特权

评论回复
27
tabmone| | 2023-10-8 14:23 | 只看该作者
volatile关键字在单片机编程中用于标识可能会被意外修改的变量

使用特权

评论回复
28
cemaj| | 2023-10-8 14:34 | 只看该作者
volatile关键字还可以作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

使用特权

评论回复
29
tpgf| | 2023-10-14 11:03 | 只看该作者
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值

使用特权

评论回复
30
wowu| | 2023-10-14 11:33 | 只看该作者
volatile关键字和synchronized关键字都实现了内存可见性

使用特权

评论回复
31
磨砂| | 2023-10-14 11:54 | 只看该作者
程序加了RTOS,并且多个任务共享一个全局变量时,用volatile关键词修饰下

使用特权

评论回复
32
xiaoqizi| | 2023-10-14 12:25 | 只看该作者
从内存可见性的角度看,写入volatile变量相当于退出同步代码块,而读取volatile变量相当于进入同步代码块。

使用特权

评论回复
33
木木guainv| | 2023-10-14 22:11 | 只看该作者
如果有全局变量,会在中断里去改变它的值,最好用volatile关键字修饰下。

使用特权

评论回复
34
wakayi| | 2023-10-15 11:00 | 只看该作者
volatile是一种稍弱的同步机制,在访问volatile变量时不会执行加锁操作,也就不会执行线程阻塞,因此volatilei变量是一种比synchronized关键字更轻量级的同步机制

使用特权

评论回复
35
digit0| | 2023-11-10 16:53 | 只看该作者
利用volatile关键字可以包管内存的可见性,即当当地内存。

使用特权

评论回复
36
Pretext| | 2023-11-10 18:35 | 只看该作者
防备编译器对于其举行优化

使用特权

评论回复
37
aple0807| | 2023-11-12 14:09 | 只看该作者
本帖最后由 aple0807 于 2023-11-12 14:10 编辑

没那么多弯弯绕。volatile修饰的变量只有一条作用:实时访问变量所在内存。 具体表现为:
1、写操作,保证直接写入变量所在内存地址。
2、读操作,保证直接从变量所在内存取数据。

使用特权

评论回复
38
LLGTR| | 2023-12-5 09:58 | 只看该作者
volatile关键字是一个相当紧张的关键字,用于控制变量的可见性以及更新方法

使用特权

评论回复
39
forgot| | 2023-12-11 08:27 | 只看该作者
使用volatile关键字可以明确地告诉编译器,这些变量的值可能会被意外地改变,因此在读取这些变量的值时,需要确保变量的值是最新的。

使用特权

评论回复
40
天天向善| | 2024-1-8 15:22 | 只看该作者
volatile关键字可用于修改变量,表明该变量可能会被意外更改

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则