找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2655|回复: 4
打印 上一主题 下一主题
收起左侧

请问C语言编译器设置中volitate有什么用呢?

[复制链接]
跳转到指定楼层
楼主
ID:518902 发表于 2021-4-20 18:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我知道它的作用是让编译器不自动优化掉一些“它认为”需要优化的变量,因为寄存器比SRAM读取要快,优化后就直接一直读寄存器,不管sram了。。之类的。
但是我目前没想到它在什么地方有什么用耶。。。。
有大神给我解答下么
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332214 发表于 2021-4-20 18:28 | 只看该作者
volitate修饰的变量 还可以理解为获取变量值的时候 编译器会重新从该变量地址获取值,而不会从寄存器中读取变量副本。
回复

使用道具 举报

板凳
ID:518902 发表于 2021-4-20 18:54 | 只看该作者
啊哈哈123 发表于 2021-4-20 18:28
volitate修饰的变量 还可以理解为获取变量值的时候 编译器会重新从该变量地址获取值,而不会从寄存器中读取 ...

感谢回答 ,是的,我就是很好奇什么时候会发生sram里变量变了 寄存器内部不变的情况。。
回复

使用道具 举报

地板
ID:592807 发表于 2021-4-20 20:13 | 只看该作者
laopihappy123 发表于 2021-4-20 18:54
感谢回答 ,是的,我就是很好奇什么时候会发生sram里变量变了 寄存器内部不变的情况。。

我的理解就是全局变量在处理函数时变量突然被中断改变

评分

参与人数 1黑币 +9 收起 理由
laopihappy123 + 9 很给力!

查看全部评分

回复

使用道具 举报

5#
ID:909296 发表于 2021-4-20 20:44 | 只看该作者
这种情况更多可能是比如引脚电平,如果你在程序里面一直写读取引脚电平,可能编译器会优化掉,只从缓存里面读取,但其实引脚连接的外部电平已经变化,单片机却使用的是过时的数据,这时就需要volitate去修饰,让单片机不要去偷懒,每次都读一次引脚电平。这些其实在单片机的库函数里面有大量体现,感兴趣的话可以去翻翻看,学习一下

评分

参与人数 2黑币 +29 收起 理由
laopihappy123 + 9
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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