μC/OS-ii的資源同步

被兩個及以上併發程序單元(任務或者ISR)訪問的資源稱爲共享資源,共享資源不一定是全局資源(有的全局變量只被一個任務調用)。

具體可以採用以下方法:

1.關中斷

OS_ENTER_CRITICAL();//關中斷
........
OS_EXIT_CRITICAL();//退出中斷

中斷關閉後,系統失去對有所事件的反應能力,不可能進行任務切換,保證對共享資源的獨佔訪問。

2.關調度

OS_SchedLock();//關調度
........
OS_Schedunlock();//開調度

與該共享資源無關的任務也受到牽連,即使他們的優先級足夠高、ISR觸發也無法獲得CPU使用權。

3. 互斥信號量

INT8U err;
OS_EVENT *Sem;//創建互斥信號量,繼承優先級爲2.繼承優先級必須高於所有需要訪問這個共享資源的任務的優先級,且繼承優先級不能和其他任務的優先級相同。
void task(void * pdata)
{
........
OSMutexPend(Sem,0,&err);獲取互斥信號量Sem

........
OSMutexPost(Sem);//釋放互斥信號量Sem

}

4.保證數據的完整性

將共享資源備份一份,再進行處理。提高系統的實時性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章