c - 替代 volatile ?

标签 c gcc embedded c99 volatile

我在我的嵌入式固件中使用了很多 volatile 变量,但大多数时候函数中只有一点我需要确保值是最新的(在开始)。但是函数的其余部分引用相同的变量名,同时可以更改值,从而产生非常意外的代码流/结果。我知道这可以通过在函数内使用临时变量来解决,但我一直在寻找更好的解决方案。

现在我想知道,不是将整个变量标记为 volatile,有没有一种方法可以指示编译器 (gcc) 使用一个特殊的关键字,我想读取变量就像它一样被标记为 volatile,所以我只能在函数开头使用该关键字一次?

最佳答案

我对这种情况有点困惑 - 如果您希望对一个变量的特定访问被视为volatile,请使用

dest = *(volatile TYPE *)&src;

其中 TYPE 是 src 的类型。您可能还需要

asm volatile ("" ::: "memory");

在仔细控制的位置,以防止编译器在 volatile 读取中移动其他内存位置的加载/存储。

同时研究 C11 的 _Atomic 类型。 (我不确定 GCC 是否支持这些。)

关于c - 替代 volatile ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19189671/

相关文章:

java - Collat​​z 和其他序列 : how to get more precision easily and avoid segfault?

c++ - 动态替换正在播放的 gstreamer 管道中的元素

c - 如何在保持纹理坐标正确的同时使用 glDrawElements?

c - 如何强制程序动态而非静态链接到 glibc 2.17

c - 记录开头出现奇怪的字符 - C

c - 比变量小的指针类型

c - 简单修改elf文件的工具?

c - 位移位不正确?

将 C 转换为 MIPS64 汇编

c - 在 C 中与 STM32 芯片的内存交互