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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
变量定义中 volatile 是什么意思 请大侠告诉我一下《ARM 微控制器基础与实战》上 c语言定义变量时出现了 volatile,不知道是做什么用的.C 语言里好像没有这个语法阿! 4 h' F. d- P% t# e) D* n, ^

该用户从未签到

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

该用户从未签到

3#
发表于 2022-12-19 13:13 | 只看该作者
编译器发现程序始终没有企图改变a的值,那它可能就会优化这段代码,变成while(true)的死循环使得程序执行的更快,然而编译器有时候也会做过度优化,它有时候可能没有意识到程序会改变a的值,却做了这种优化导致程序没有产生预期的行为。
. }( C' i. M& o9 P) M, z这里为了产生预期的行为,需要阻止编译器做这种优化,可以使用volatile关键字修饰。
4 {! N2 |# g" T; `7 u

该用户从未签到

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

    [LV.1]初来乍到

    5#
    发表于 2022-12-19 14:23 | 只看该作者
    不让编译器进行优化,即每次读取或者修改值的时候,都必须重新从内存或者寄存器中读取或者修改。7 m7 H3 x8 h. W% B" T8 `
    volatile的基本应用场合:
    3 ^, Q" `! m# Z% u1 中断服务程序中修改的供其它程序检测的变量需要加volatile;/ i0 k0 m3 |1 i7 A. U( e
    2 多任务环境下各任务间共享的标志应该加volatile;
    & `$ E5 B6 o2 Q4 M3 n3 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;5 v4 ^" c4 q; M$ F0 L
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-3 22:32 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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