打印

C语言static修饰的变量可以写为static volatile吗

[复制链接]
8237|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
张小凡|  楼主 | 2024-2-20 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于结构体内某个位域值无缘无故被改变,在该位域前多加几个无用位域时程序就正常了,我猜测某些变量溢出然后更改了这个位域的值,我在所有数组赋值时都加了限制数组下标,该问题还是没有解决。然后把除了static外所有变量都加volatile修饰,该问题还是没有解决。现在打算把static也加上volatile修饰试下,C语言static修饰的变量可以写为static volatile unsigned char防止编译被优化吗?

使用特权

评论回复

相关帖子

沙发
Jekele| | 2024-2-21 23:16 | 只看该作者

C语言static修饰的变量可以写为static volatile吗

staticvolatile关键字可以一起使用来修饰变量。static关键字确保变量在程序的整个生命周期内保持其值,并且只在定义它的文件或函数内部可见。而volatile关键字告诉编译器,这个变量的值可能会在程序运行时被外部因素(如硬件、操作系统或其他线程)改变,因此编译器在生成代码时不应该对这个变量进行优化。

可以这样声明一个static volatile变量:
static volatile unsigned char my_variable;
如果你确定问题是由于硬件层面的随机变化,那么将static变量声明为static volatile可能会有所帮助。这样,每次访问这个变量时,编译器都会确保从内存中读取最新的值,而不是使用寄存器中的值。但是,这并不会防止硬件层面的问题,只是确保了软件层面的正确性。
这种方法可能不会解决所有问题,特别是如果问题确实是由硬件故障引起的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝