在實時嵌入式系統(tǒng)中,性能和資源效率是決定設(shè)計成敗的關(guān)鍵因素。傳統(tǒng)的實時操作系統(tǒng)(RTOS)提供了如隊列、信號量和事件組機制,實現(xiàn)任務(wù)之間的同步和通信。FreeRTOS/SAFERTOS還提供一種方法可以使這些過程更快、更輕量化,即任務(wù)通知。
什么是任務(wù)通知?
任務(wù)通知作為傳統(tǒng)RTOS同步方法的輕量級替代方案,F(xiàn)reeRTOS/SAFERTOS中的每個任務(wù)都有一個32位的通知值。這些通知可用于解除任務(wù)阻塞并以靈活的方式更新其通知值,例如:
?設(shè)置通知值但不覆蓋舊值
?更新通知值
?設(shè)置通知值中的指定位
?通知值加一
其靈活性允許任務(wù)通知在某些用例中取代單獨創(chuàng)建的同步對象(如隊列或信號量)。如果使用得當(dāng),任務(wù)通知顯著可以提高系統(tǒng)的速度和內(nèi)存效率。
任務(wù)通知vs傳統(tǒng)機制
二進制信號量:傳統(tǒng)方式中,當(dāng)僅有一個任務(wù)需要使用信息時,可以使用二進制信號量管理任務(wù)同步。然而,二進制信號量的管理需要一個隊列控制結(jié)構(gòu)。使用任務(wù)通知消除了這種結(jié)構(gòu),減少了RAM使用并簡化了內(nèi)部RTOS進程。
事件組:事件組是二進制標(biāo)志位的集合,每個標(biāo)志位都有特定的含義。任務(wù)通知也可以達到這個目的。與管理專用的事件組對象不同,32位任務(wù)通知值可以被視為二進制標(biāo)志的集合,從而提供了更有效的替代方法。
任務(wù)通知的優(yōu)勢
速度:使用任務(wù)通知解除任務(wù)阻塞的速度比使用傳統(tǒng)的二進制信號量快45%。對于時間敏感的應(yīng)用程序來說,這是一個顯著的改進。
節(jié)省內(nèi)存:任務(wù)通知減少了對額外的RTOS控制結(jié)構(gòu)(如隊列或信號量)的需求,從而減少了RAM使用,這在資源受限的系統(tǒng)中至關(guān)重要。
使用限制
雖然任務(wù)通知提供了實質(zhì)性的性能改進,但它們也有一些用例限制:
單接收任務(wù)限制:在事件只有一個接收任務(wù)時,才能使用任務(wù)通知,不適合多個任務(wù)需要使用相同事件或通知的場景。
非阻塞發(fā)送:與隊列不同,如果通知已經(jīng)掛起,任務(wù)通知不會阻塞發(fā)送任務(wù)。但是,可以將通知配置為“不覆蓋舊值”,確保在前一個通知處理之前不會發(fā)送新的通知。
典型應(yīng)用場景
任務(wù)同步:當(dāng)一個任務(wù)需要通知或解除阻塞另一個任務(wù)時。
中斷處理:任務(wù)通知可以用作ISR(中斷服務(wù)程序)和任務(wù)之間的輕量級二進制信號量,在中斷發(fā)生后解除阻塞任務(wù)。
事件標(biāo)志管理:任務(wù)通知值可以充當(dāng)事件組,其中每個位代表一個不同的標(biāo)志,減少了對指定事件組對象的需求。
結(jié)論
對于希望優(yōu)化其嵌入式系統(tǒng)的性能和資源使用的開發(fā)人員來說,任務(wù)通知是一個強大的工具。使用任務(wù)通知可以替代只涉及單個任務(wù)場景的同步機制,可以顯著改速度和內(nèi)存效率。
在實時系統(tǒng)中,每個毫秒和字節(jié)都很重要,無論是處理任務(wù)同步、處理ISR還是管理事件標(biāo)志,任務(wù)通知都可以提供一種簡化且有效的解決方案。
FreeRTOS V10.4.0之后的版本,支持通知數(shù)組。SAFERTOS基于FreeRTOS功能模型的預(yù)認(rèn)證安全實時操作系統(tǒng) (RTOS),用戶可以基于FreeRTOS免費啟動項目,實現(xiàn)原型驗證,并在正式開發(fā)開始時升級到SAFERTOS。
-
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3593瀏覽量
129473 -
RTOS
+關(guān)注
關(guān)注
22文章
813瀏覽量
119636 -
實時操作系統(tǒng)
+關(guān)注
關(guān)注
1文章
198瀏覽量
30758
原文標(biāo)題:使用任務(wù)通知提高RTOS應(yīng)用的效率
文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論