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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

该用户从未签到

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

该用户从未签到

3#
发表于 2022-12-19 13:13 | 只看该作者
编译器发现程序始终没有企图改变a的值,那它可能就会优化这段代码,变成while(true)的死循环使得程序执行的更快,然而编译器有时候也会做过度优化,它有时候可能没有意识到程序会改变a的值,却做了这种优化导致程序没有产生预期的行为。
" h, N% T9 H$ |& X* P* Q& y8 e6 }6 F这里为了产生预期的行为,需要阻止编译器做这种优化,可以使用volatile关键字修饰。
; k3 b6 H+ j7 O$ N% A. Y

该用户从未签到

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

    [LV.1]初来乍到

    5#
    发表于 2022-12-19 14:23 | 只看该作者
    不让编译器进行优化,即每次读取或者修改值的时候,都必须重新从内存或者寄存器中读取或者修改。( J' x  T1 g; y% @6 K4 ~
    volatile的基本应用场合:
    8 I! m- |/ c8 l/ A$ n1 中断服务程序中修改的供其它程序检测的变量需要加volatile;
    . @% i7 d3 Y0 \2 多任务环境下各任务间共享的标志应该加volatile;  o: x9 _* K5 V, `$ b& ~$ k
    3 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
    7 h, f9 I, |+ D/ E! \& `
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-24 14:08 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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