标题: 请问C语言编译器设置中volitate有什么用呢? [打印本页]

作者: laopihappy123    时间: 2021-4-20 18:09
标题: 请问C语言编译器设置中volitate有什么用呢?
我知道它的作用是让编译器不自动优化掉一些“它认为”需要优化的变量,因为寄存器比SRAM读取要快,优化后就直接一直读寄存器,不管sram了。。之类的。
但是我目前没想到它在什么地方有什么用耶。。。。
有大神给我解答下么

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

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

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1