任務通知簡介
任務通知在 FreeRTOS 中是一個可選的功能,要使用任務通知的話就需要將宏configUSE_TASK_NOTIFICATIONS 定義為 1。
FreeRTOS 的每個任務都有一個 32 位的通知值,任務控制塊中的成員變量 ulNotifiedValue 就是這個通知值。任務通知是一個事件,假如某個任務通知的接收任務因為等待任務通知而阻塞的話,向這個接收任務發送任務通知以后就會解除這個任務的阻塞狀態。也可以更新接收任務的任務通知值,任務通知可以通過如下方法更新接收任務的通知值:
● 不覆蓋接收任務的通知值(如果上次發送給接收任務的通知還沒被處理)。
● 覆蓋接收任務的通知值。
● 更新接收任務通知值的一個或多個 bit。
● 增加接收任務的通知值。
合理、靈活的使用上面這些更改任務通知值的方法可以在一些場合中替代隊列、二值信號量、計數型信號量和事件標志組。使用任務通知來實現二值信號量功能的時候,解除任務阻塞的時間比直接使用二值信號量要快 45%(FreeRTOS 官方測試結果,使用 v8.1.2 版本中的二值信號量,GCC 編譯器,-O2 優化的條件下測試的,沒有使能斷言函數 configASSERT()),并且使用的 RAM 更少!
任務通知的發送使用函數 xTaskNotify()或者 xTaskNotifyGive()(還有此函數的中斷版本)來 完 成 , 這個通知值會一直保持著 ,直到接受任務調用函數xTaskNotifyWait() 或 者ulTaskNotifyTake()來獲取這個通知值。假如接收任務因為等待任務通知而阻塞的話那么在接收到任務通知以后就會解除阻塞態。
任務通知雖然可以提高速度,并且減少 RAM 的使用,但是任務通知也是有使用限制的:
● FreeRTOS 的任務通知只能有一個接收任務,其實大多數的應用都是這種情況。
● 接收任務可以因為接收任務通知而進入阻塞態,但是發送任務不會因為任務通知發送失敗而阻塞。
-
嵌入式
+關注
關注
5103文章
19268瀏覽量
310016 -
FreeRTOS
+關注
關注
12文章
484瀏覽量
62772
發布評論請先 登錄
相關推薦
FreeRTOS中的任務管理
FreeRTOS任務通知模擬二值信號量怎么都獲取不成功是怎么回事
任務通知發送出問題怎么辦
FreeRTOS任務通知相關資料分享
使用FreeRTOS通知功能加速應用執行
FreeRTOS的直接任務(消息)通知
FreeRTOS —— 9.任務通知

FreeRTOS高級篇8---FreeRTOS任務通知分析

FreeRTOS系列第14篇---FreeRTOS任務通知

評論