找回密码
 注册
关于网站域名变更的通知
查看: 338|回复: 4
打印 上一主题 下一主题

c语言定义变量时出现了 volatile,不知道是做什么用的

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-12-19 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
变量定义中 volatile 是什么意思 请大侠告诉我一下《ARM 微控制器基础与实战》上 c语言定义变量时出现了 volatile,不知道是做什么用的.C 语言里好像没有这个语法阿!
. E4 ^+ j$ D6 H

该用户从未签到

2#
发表于 2022-12-19 11:07 | 只看该作者
告诉编译器不要优化掉,volatile 是易变的意思。

该用户从未签到

3#
发表于 2022-12-19 13:13 | 只看该作者
编译器发现程序始终没有企图改变a的值,那它可能就会优化这段代码,变成while(true)的死循环使得程序执行的更快,然而编译器有时候也会做过度优化,它有时候可能没有意识到程序会改变a的值,却做了这种优化导致程序没有产生预期的行为。5 s) t3 e4 O* |( c- F0 M$ t; Q5 f
这里为了产生预期的行为,需要阻止编译器做这种优化,可以使用volatile关键字修饰。
; ^& E: m  _0 r6 E7 Q* J' r

该用户从未签到

4#
发表于 2022-12-19 13:41 | 只看该作者
volatile是一个类型修饰符,+ v. C9 E. L- M$ g
作用是作为指令关键字,一般都是和const对应,确保本条指令不会被编译器的优化而忽略。
  • TA的每日心情
    开心
    2022-12-20 15:40
  • 签到天数: 2 天

    [LV.1]初来乍到

    5#
    发表于 2022-12-19 14:23 | 只看该作者
    不让编译器进行优化,即每次读取或者修改值的时候,都必须重新从内存或者寄存器中读取或者修改。
    ; N- c1 [3 Q7 H2 B- b9 @volatile的基本应用场合:; g# x+ m1 b. B, m+ ]
    1 中断服务程序中修改的供其它程序检测的变量需要加volatile;/ Q% w+ e: g% H: W- ]% u* I) d# v& {; o
    2 多任务环境下各任务间共享的标志应该加volatile;
    ) o4 D' @! j( y, ~3 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;0 h; b# m7 I( m+ ~
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-28 20:34 , Processed in 0.109375 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表