任務(wù)通知簡(jiǎn)介
任務(wù)通知在 FreeRTOS 中是一個(gè)可選的功能,要使用任務(wù)通知的話就需要將宏configUSE_TASK_NOTIFICATIONS 定義為 1。
FreeRTOS 的每個(gè)任務(wù)都有一個(gè) 32 位的通知值,任務(wù)控制塊中的成員變量 ulNotifiedValue 就是這個(gè)通知值。任務(wù)通知是一個(gè)事件,假如某個(gè)任務(wù)通知的接收任務(wù)因?yàn)榈却蝿?wù)通知而阻塞的話,向這個(gè)接收任務(wù)發(fā)送任務(wù)通知以后就會(huì)解除這個(gè)任務(wù)的阻塞狀態(tài)。也可以更新接收任務(wù)的任務(wù)通知值,任務(wù)通知可以通過如下方法更新接收任務(wù)的通知值:
● 不覆蓋接收任務(wù)的通知值(如果上次發(fā)送給接收任務(wù)的通知還沒被處理)。
● 覆蓋接收任務(wù)的通知值。
● 更新接收任務(wù)通知值的一個(gè)或多個(gè) bit。
● 增加接收任務(wù)的通知值。
合理、靈活的使用上面這些更改任務(wù)通知值的方法可以在一些場(chǎng)合中替代隊(duì)列、二值信號(hào)量、計(jì)數(shù)型信號(hào)量和事件標(biāo)志組。使用任務(wù)通知來實(shí)現(xiàn)二值信號(hào)量功能的時(shí)候,解除任務(wù)阻塞的時(shí)間比直接使用二值信號(hào)量要快 45%(FreeRTOS 官方測(cè)試結(jié)果,使用 v8.1.2 版本中的二值信號(hào)量,GCC 編譯器,-O2 優(yōu)化的條件下測(cè)試的,沒有使能斷言函數(shù) configASSERT()),并且使用的 RAM 更少!
任務(wù)通知的發(fā)送使用函數(shù) xTaskNotify()或者 xTaskNotifyGive()(還有此函數(shù)的中斷版本)來 完 成 , 這個(gè)通知值會(huì)一直保持著 ,直到接受任務(wù)調(diào)用函數(shù)xTaskNotifyWait() 或 者ulTaskNotifyTake()來獲取這個(gè)通知值。假如接收任務(wù)因?yàn)榈却蝿?wù)通知而阻塞的話那么在接收到任務(wù)通知以后就會(huì)解除阻塞態(tài)。
任務(wù)通知雖然可以提高速度,并且減少 RAM 的使用,但是任務(wù)通知也是有使用限制的:
● FreeRTOS 的任務(wù)通知只能有一個(gè)接收任務(wù),其實(shí)大多數(shù)的應(yīng)用都是這種情況。
● 接收任務(wù)可以因?yàn)榻邮杖蝿?wù)通知而進(jìn)入阻塞態(tài),但是發(fā)送任務(wù)不會(huì)因?yàn)槿蝿?wù)通知發(fā)送失敗而阻塞。
-
嵌入式
+關(guān)注
關(guān)注
5082文章
19126瀏覽量
305241 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62181
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論