這個ENTER EXIT CRITICAL代碼把優先級暫存在R0里,那怎么保證臨界區之間的代碼不會用到R0,如果用到豈不是有問題了

uj5u.com熱心網友回復:
你所看到匯編代碼是有對應的C函式原型的。uint32_t ulSetInterruptMask( void );
void vClearInterruptMask( uint32_t ulMask );
ulSetInterruptMask有一個回傳值,這個回傳值就是通過R0來傳遞的,呼叫ulSetInterruptMask時需要把這個回傳值保存起來。之后再恢復,臨界區中間R0是可以自由使用的。
uint32_t saved;
saved = ulSetInterruptMask(); // 進入臨界區,當前的中斷狀態被保存到saved
// 臨界區代碼,可以使用R0,
vClearInterruptMask(saved);// 退出臨界區,恢復保存的中斷狀態
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/129973.html
標籤:單片機/工控
