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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
变量定义中 volatile 是什么意思 请大侠告诉我一下《ARM 微控制器基础与实战》上 c语言定义变量时出现了 volatile,不知道是做什么用的.C 语言里好像没有这个语法阿!
* r- \; S2 N  i5 Y5 U$ d6 p! D

该用户从未签到

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

该用户从未签到

3#
发表于 2022-12-19 13:13 | 只看该作者
编译器发现程序始终没有企图改变a的值,那它可能就会优化这段代码,变成while(true)的死循环使得程序执行的更快,然而编译器有时候也会做过度优化,它有时候可能没有意识到程序会改变a的值,却做了这种优化导致程序没有产生预期的行为。% S( u; H3 {. h. F+ `2 E
这里为了产生预期的行为,需要阻止编译器做这种优化,可以使用volatile关键字修饰。, o3 ~( ^( i5 C( Y+ _' y' X

该用户从未签到

4#
发表于 2022-12-19 13:41 | 只看该作者
volatile是一个类型修饰符,& x8 s. B& J; P) H  y. w
作用是作为指令关键字,一般都是和const对应,确保本条指令不会被编译器的优化而忽略。
  • TA的每日心情
    开心
    2022-12-20 15:40
  • 签到天数: 2 天

    [LV.1]初来乍到

    5#
    发表于 2022-12-19 14:23 | 只看该作者
    不让编译器进行优化,即每次读取或者修改值的时候,都必须重新从内存或者寄存器中读取或者修改。
    + H; s1 U) T/ |4 ^# o( lvolatile的基本应用场合:; \$ P( C: B+ @) _, A& P( C8 P, |
    1 中断服务程序中修改的供其它程序检测的变量需要加volatile;
    " e. Z, c5 }7 e' A6 e. S2 多任务环境下各任务间共享的标志应该加volatile;: B$ j7 f* |" w% B$ \1 C
    3 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;" Q7 ?% x6 u2 U# ^
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-20 06:31 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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