如果修改全局变量是原子操作,那么不需要关中断。非原子操作需要关中断,至于关哪个看非原子操作影响的中断。
举个例子,对于八位单片机来说:
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的中断即可,不需要关闭其他中断。至于其他情形,楼主自己理解并发挥好了。
|