EDA365电子论坛网
标题:
c语言定义变量时出现了 volatile,不知道是做什么用的
[打印本页]
作者:
Maskman
时间:
2022-12-19 10:13
标题:
c语言定义变量时出现了 volatile,不知道是做什么用的
变量定义中 volatile 是什么意思 请大侠告诉我一下《ARM 微控制器基础与实战》上 c语言定义变量时出现了 volatile,不知道是做什么用的.C 语言里好像没有这个语法阿!
" U& I: ~' m* f6 `4 i7 e2 }7 a- I h
作者:
CRAZY_argentina
时间:
2022-12-19 11:07
告诉编译器不要优化掉,volatile 是易变的意思。
作者:
Crash
时间:
2022-12-19 13:13
编译器发现程序始终没有企图改变a的值,那它可能就会优化这段代码,变成while(true)的死循环使得程序执行的更快,然而编译器有时候也会做过度优化,它有时候可能没有意识到程序会改变a的值,却做了这种优化导致程序没有产生预期的行为。
' f% G5 n0 G h
这里为了产生预期的行为,需要阻止编译器做这种优化,可以使用volatile关键字修饰。
. k. g& v9 t1 ?$ P
作者:
tick_tock
时间:
2022-12-19 13:41
volatile是一个类型修饰符,
" I5 q2 M# k4 @2 v" {
作用是作为指令关键字,一般都是和const对应,确保本条指令不会被编译器的优化而忽略。
作者:
伯牙琴
时间:
2022-12-19 14:23
不让编译器进行优化,即每次读取或者修改值的时候,都必须重新从内存或者寄存器中读取或者修改。
( x, e& [! m1 r
volatile的基本应用场合:
6 u9 J% H8 d/ i- L* c
1 中断服务程序中修改的供其它程序检测的变量需要加volatile;
! H' `, ]/ x% s; H J
2 多任务环境下各任务间共享的标志应该加volatile;
' x% }- x9 Y: q _* }& r1 a
3 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
# F+ @; i, y4 n$ d' z6 v' ^2 P
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2