程序中有一段代码执行过程需要连续执行,不希望被中断打断。
可不可以直接使用开关总中断的办法?
如果使用开关总中断的方法,需要在关总中断之前保存哪些寄存器的值?
如果是使用的裸机的工程,没有使用RTOS,可以关中断,关中断时不用你保存的,由于你运行到原子操作时,一定是没有进中断,所以中断中的程序也没有运行呢,也就不用保存什么了。
如果有RTOS,要RTOS有一些相关的API函数,可以根据你选择的RTOS使用不同的函数。来生成一段临界区进行类原子操作。
而这里也不用你去保存,RTOS会自己保存的。
禁用所有中断,执行完之后再打开,分别执行下面两个语句
__disable_irq(); // 关闭总中断__enable_irq(); // 开启总中断
所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持
对于C里边并没有原子操作这个概念,楼主可以考"关中断"、"开中断"来制造一个临界区,在这中间做不可中断的操作
因為stm32都不是跑完整系統,所以不會有Mutex,spinlock,semphore這類問題
所以只要關閉全部中斷,除非有hard fault,不然都可以正確完全執行到結束
以上