一个全局变量,在主函数和中断都会操作到,则在主循环必须先关闭中断再操作该变量吗?

Lkingz |浏览1886次
收藏|2017/04/11 14:25

无意中看到你之前回答的中断中修改全局变量的代码,在主函数中必须关闭中断再操作该变量

http://www.nuvoton-mcu.com/nufaq/?q-334.html

就是说对ARM cortex的任何芯片,不管是8位、16位还是32位变量,都要在主函数中先关闭中断再操作变量?

但我有用到的M451 Series, NUC123SeriesBSP好多例程都是中断会改变变量值,而主循环一直读该变量进行判断操作,都是没关闭中断的,如这个例程

M451 Series BSP CMSIS V3.01.001\SampleCode\StdDriver\SPI_MasterMode

还是说主循环如果只是对变量进行大小之类的逻辑判断,不是重新赋值给该变量,就不需要关中断?

满意回答

2022/09/06 14:45

1>,如果中断内外都对一个变量写,中断外的写就要关中断。

2>,如果中断内写,中断外只读;或中断外写,中断内只读,可以不关中断,

3>,如果一变量只在一个中断里写个标志(不与其它中断共用),中断外检测并清标志,代码较少时,只要不会在执行中断代码时,又发生中断标志置位,就不会丢标志。否则仍有可能丢一次标志。


精简指令单片机,无论8位,16位,还是32位都有上述问题。非精简指令单片机,一条指令完成内存中的数据改写,就不存在上述问题,

Angus

其他回答(0)
0人关注该问题
+1
 加载中...