全局变量 与 中断 的对决

[复制链接]
 楼主| roucun 发表于 2020-4-24 20:18 | 显示全部楼层 |阅读模式
由于是半路出家,问题可能有点幼稚,请大家原谅:
网上听说,在修改全局变量时,需要关中断。这个可以理解,因为有可能在修改的中途,中断又把它改了一次。
我不清楚的是:是否所有的中断都要关呢?那不是太多了?是否有一个总开关呢?
cainiao518 发表于 2020-4-24 21:00 | 显示全部楼层
有总开关
你瞅啥 发表于 2020-4-24 21:08 | 显示全部楼层
如果修改全局变量是原子操作,那么不需要关中断。非原子操作需要关中断,至于关哪个看非原子操作影响的中断。

举个例子,对于八位单片机来说:
uint8_t i;
i++; 这是原子操作,不需要关中断。

uint16_t i;
i++;
这是非原子操作,i++会分解成两步,1)i的低八位加1,如果发生溢出则进位位C置1,未发生溢出C=0;2)i的高八位+C
在主程序里面执行i++,设i=0xff,如果在上述第一步之后,第二步之前发生中断,则i的值为0!!!如果中断函数引用了这个完全不合理的全局变量i的值,就会发生意想不到的错误。在这种情况下,关闭引用i的中断即可,不需要关闭其他中断。至于其他情形,楼主自己理解并发挥好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

421

主题

446

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部