c - 如果在 AVR 编程中所有变量都定义为 volatile 是不是很糟糕?

标签 c volatile avr atmega

我读到在某些情况下(全局变量或 while(variable) 等)如果变量未定义为 volatile 可能会导致问题。

如果我将所有 变量都定义为volatile 会导致问题吗?

最佳答案

如果当前作用域或任何后续子作用域之外的东西(想想:函数调用)可以修改您正在使用的变量(有一个定时器中断会增加您的变量,您将 var 的引用提供给其他人可能响应中断等做某事的代码)那么变量应该声明为 volatile。

volatile 是对编译器的提示,“其他东西可能会改变这个变量。”编译器的 react 是,“哦。好的。我永远不会相信我在寄存器或堆栈中的这个变量的副本。每次我需要使用这个变量时,我都会从内存中读取它,因为我的副本在寄存器中可能已经过时了。”

将所有内容都声明为 volatile 会使您的代码变慢很多,并导致更大的二进制文件。正确的答案不是这样做,而是了解需要标记 volatile 的内容,为什么这样做,并适本地标记。

关于c - 如果在 AVR 编程中所有变量都定义为 volatile 是不是很糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17708835/

相关文章:

Java:同步操作与波动性究竟有何关系?

c - 如何将 Atmega32 上的引脚连接到 4 位 LCD,以便此代码正常工作

c - _stat 在网络目录上失败

c# - 如何获取 Internet Explorer 和 Firefox 选项卡的内存详细信息?

c - 我应该在这个库中使用 volatile 吗(以及在哪里)?

java - 即使没有 volatile ,线程值也不会被线程缓存?

assembly - 汇编代码中的随机数生成器

c - 为什么生成此代码以取消引用浮点指针?

c - 在 Borland C++ 编译器中链接 DLL

c - XML 解析启动处理程序中的指针值已更改