【STM32】臨界區進入退出宏 OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL()


宏函數展開為:

1 #define  OS_CRITICAL_METHOD   3
2 
3 #if OS_CRITICAL_METHOD == 3
4 #define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}
5 #define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}
6 #endif

OS_CPU_SR_Save() 和 OS_CPU_SR_Restore(cpu_sr) 在os_cpu_a.asm 中,為移植函數:

 1 OS_CPU_SR_Save                 //PRIMASK缺省值0 中斷屏蔽寄存器  =1 關閉所有可屏蔽異常 只剩下NMI和硬fault可以響應
 2     MRS     R0, PRIMASK        //MRS指令用於將狀態寄存器的內容傳送到通用寄存器中 讀取PRIMASK到R0中,R0為返回值
 3 
 4     CPSID   I                  //PRIMASK=1,關中斷(NMI和硬fault可以響應
 5     BX      LR                 //返回   BX帶狀態切換的條狀指令
 6 
 7 OS_CPU_SR_Restore              //讀取R0到PRIMASK中,R0為參數
 8 
 9     MSR     PRIMASK, R0
10     BX      LR

說明:

中斷屏蔽寄存器
PRIMASK
這個寄存器只有一個位,置1后,將關閉所有可屏蔽中斷的異常,只剩NMI和硬fault,默認值為0;

 

進入臨界區,將關中斷前的中斷屏蔽狀態保存到局部變量中。

退出臨界區,將之前保存的中斷屏蔽狀態恢復到PRIMASK中斷屏蔽寄存器中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM