打印

全局变量 与 中断 的对决

[复制链接]
409|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

粉丝