OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3334|回复: 3

ucosiii的代码里为什么没用过 volatile关键字?

[复制链接]

68

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2017-3-2
在线时间
156 小时
发表于 2018-3-24 14:47:06 | 显示全部楼层 |阅读模式
10金钱
在多线程和中断中的变量需要加 volatile关键字来告诉编译器不要优化该变量,每次都从内存地址读取而不是寄存器的备份,但是我阅读了ucOSiii的源码,发现里面没有用到这个关键字,比如像 OSIntNestingCtr 这种在中断中更新,用来记录中断嵌套层次的变量都没有使用 volatile关键字,这样的代码在开启优化的时候不会出问题吗?uc是成熟的代码了,肯定不会犯这种错误,这里是另有什么玄机我没发现码,有谁知道咋回事?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-3-24 15:27:20 | 显示全部楼层
volatile,从字面上说是易变的、不稳定的,事实上,也确实如此,这个关键字的作用就是告诉编译器,只要是被此关键字修饰的变量都是易变的、不稳定的。那为什么是易变的呢?因为volatile所修饰的变量是直接存在于主内存中的,线程对变量的操作也是直接反映在主内存中,所以说其是易变的。
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
849
金钱
849
注册时间
2017-6-18
在线时间
166 小时
发表于 2018-3-24 15:27:37 来自手机 | 显示全部楼层
这里是C编译器,用的是C语言
回复

使用道具 举报

68

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2017-3-2
在线时间
156 小时
 楼主| 发表于 2018-3-26 08:35:46 | 显示全部楼层
有人知道咋回事吗?为什么uc里面没用这个关键字?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 22:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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