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 a3 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;# F+ @; i, y4 n$ d' z6 v' ^2 P





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2