【原理】RT-Thread內部IPC之信號量

關於操作系統,FreeRTOS也好,UCOS也好,再或者是RT-Thread,都有任務間的通訊機制(簡稱IPC),分別有:信號量,互斥量,事件郵箱,消息隊列。從裸機轉向操作系統,我們便需要學習他們,下面,簡單總結一下信號量的原理與使用的好處。

 

裸機下開發:任務間的通訊通常我們都是使用一個變量,任務是否執行前,我們都會先去判斷這個變量是否爲true。這樣便會造成:1,實時性不高,若我們的任務比較繁多,當任務1的變量在任務2執行過程中更改爲true,MCU需要跑完一圈任務,才能執行任務1,這樣變回使任務實時性不高。2,變量沒有爲true時,任務仍需要輪詢。

 

信號量原理主要有獲取信號量與釋放信號量:

獲取信號量:當任務執行時,需要獲取信號量時,若此時信號量爲0,則任務根據等待信號量的時間會直接返回、掛起一段掛起、或永久掛起。 任務掛起時,MCU不會進行輪詢,從而減輕了MCU的負荷。

釋放信號量:釋放了信號量時,若信號量隊列上沒有掛起任務,則信號量數值會+1,若有任務掛起時,信號量數值不會+1,而是直接將掛起的一個任務A狀態更改爲就緒,並進行一次任務調度,若就緒任務隊列內沒有任務比進任務A優先級高,則任務A馬上執行。

 

相比之下,使用信號量會提高任務間的通訊實時性,以及減輕MCU的負荷。

關於信號量的應用場景,RT-Thread編程手冊寫的很完美,看手冊即可。

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