?TI-RTOS可從占用空間最小的實時多任務(wù)內(nèi)核-TI-RTOS內(nèi)核(以前稱為SYS/BIOS)-擴展到完整的實時操作系統(tǒng)解決方案,包括協(xié)議棧、多核通信、設(shè)備驅(qū)動進程和電源管理。
TI-RTOS產(chǎn)品
TI-RTOS有三種方式可用:
- 處理器SDK:對于Keystone和Sitara設(shè)備,TI-RTOS內(nèi)核包含在處理器SDK中。
- SYS/BIOS產(chǎn)品:內(nèi)核產(chǎn)品作為獨立產(chǎn)品提供。建議將此產(chǎn)品用于C2000設(shè)備,或希望TI-RTOS版本比處理器SDK中提供的版本更新的客戶。
- TI-RTOS產(chǎn)品:這些產(chǎn)品包含用于MCU設(shè)備的TI-RTOS和RTOS感知驅(qū)動進程(例如UART、I2C等)。
TI-RTOS內(nèi)核
TI-RTOS的核心是內(nèi)核。
TI-RTOS內(nèi)核代碼位于CC13xx和CC26xx設(shè)備的ROM中。這允許應(yīng)用進程使用更多的閃存。請注意:內(nèi)核仍然需要少量的閃存和/或RAM內(nèi)存。
調(diào)度
內(nèi)核的主要功能是調(diào)度進程。調(diào)度進程負責(zé)確保最高優(yōu)先級的線程正在運行。TI-RTOS有四種不同類型的線程。
- 硬件中斷(Hwi):硬件運行至完成。他們不會阻止任何東西。它們可能會被優(yōu)先級較高的Hwi搶占。所有Hwi共享同一堆棧(系統(tǒng)堆棧)。Hwi可以用C語言寫成。它們由TI-RTOS調(diào)度進程管理,但有一個例外:零延遲中斷。應(yīng)用進程可以將任何中斷指定為零延遲中斷。這意味著TI-RTOS調(diào)度進程不會與該中斷進行交互。我們稱之為零延遲中斷,因為TI-RTOS內(nèi)核為這些中斷的執(zhí)行增加了零延遲。零延遲中斷的缺點是它們無法調(diào)用內(nèi)核調(diào)度進程API(例如Semephore_post()等)。
- 軟件中斷(Swi):Swi線程類似于Hwi,只是它是軟件啟動的,而不是硬件。它還會一直運行到完成。它與Hwi線程共享相同的系統(tǒng)堆棧。由于Swi的運行優(yōu)先級低于Hwi,因此它們對于執(zhí)行延遲Hwi工作以最大程度地減少中斷延遲非常有用。
- Tasks:任務(wù)是最常見的操作系統(tǒng)線程。每個任務(wù)都有自己的堆棧(在其中維護其狀態(tài))。由于它有自己的堆棧,因此任務(wù)可以阻塞。沒有允許的最大任務(wù)數(shù)(系統(tǒng)內(nèi)存允許)。
Idle: Idle是一項特殊任務(wù)。它以最低優(yōu)先級運行(0是最低優(yōu)先級,1是次低優(yōu)先級,...,(Task_numPriorites-1)是最高優(yōu)先級)。 Idle任務(wù)執(zhí)行后臺任務(wù),如系統(tǒng)堆棧檢查(如果啟用)、CPU負載確定(如果啟用)等。它還執(zhí)行應(yīng)用進程插入的功能。當(dāng) Idle線程運行時,低功耗設(shè)備可以進入低功耗模式。
線程通信
TI-RTOS包含多種線程通信機制:
- 信號量:用于控制對公共資源的訪問的對象。它們可用于任務(wù)同步和互斥。
- 郵箱:信息傳遞模塊
- 隊列:雙鏈列表(雖然沒有同步)
- 入口:用于保護對關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的并發(fā)訪問。門是一個重入互斥體。
- 事件:允許通過多個事件進行同步的模塊。
計時服務(wù)
- 計時器:允許管理硬件計時器的模塊。
- 時鐘:默認情況下,TI-RTOS使用計時器來驅(qū)動計時服務(wù)(例如Task_sleep()等)。應(yīng)用進程可以將函數(shù)插入時鐘模塊,該模塊將按期請求的速率調(diào)用。插入式時鐘功能可以是周期性的,也可以是單次的。
- 秒:設(shè)備RTC計時器的統(tǒng)一前端。
內(nèi)存管理器
堆棧 描述 使用原因 HeapMem 可變大小分配 非常靈活 HeapBuf 固定大小分配 快速且確定 HeapMultiBuf 多個固定大小分配 快速且確定 HeapMin 可變大小,僅增長 快速且確定(但不能清空) HeapTrack 堆疊診斷堆棧 幫助查找內(nèi)存泄漏、損壞等
堆棧位于Memory_alloc()和Memory_free()API的下面。默認情況下,TI-RTOS會創(chuàng)建一個系統(tǒng)(或默認)堆棧。當(dāng)在Memory_alloc()和Memory_free()中傳入IHeapHandle的NULL時,將使用此堆棧。系統(tǒng)堆棧也用于malloc()和free()函數(shù)(內(nèi)核取代了RTSmalloc()和free()函數(shù))。默認情況下,系統(tǒng)堆棧是一個HeapMem實例,其大小由鏈接器命令文檔中的設(shè)置控制。
一個應(yīng)用進程在應(yīng)用進程中可以有多個堆棧。一種常見的用法是讓系統(tǒng)堆棧成為HeapMem,然后創(chuàng)建一個HeapBuf實例來管理固定塊,這些固定塊可以快速分配和釋放,而不會出現(xiàn)碎片(或者更準確地說,沒有外部碎片)。我們通??吹较到y(tǒng)堆棧保留為HeapMem實例,因為可能很難知道應(yīng)用進程中的所有分配(以及分配的大?。┌l(fā)生的位置。
TI-RTOS配置和示例
內(nèi)核是基于TI-RTOS內(nèi)核配置文檔(也稱為.cfg文檔)中的設(shè)置構(gòu)建的。這個文檔基本上是一個JavaScript文檔,可以作為文本文檔或圖形編輯(圖形方式僅在CCS中可用)。作為應(yīng)用進程構(gòu)建的一部分,.cfg文檔將生成內(nèi)核對象和庫。
應(yīng)用進程可以通過兩種不同的方式將TI-RTOS內(nèi)核配置文檔包含在SimpleLink SDK中:
- 應(yīng)用進程項目包括.cfg文檔
- 應(yīng)用進程項目(例如TI驅(qū)動進程示例)指向TI-RTOS內(nèi)核配置項目
單獨的內(nèi)核配置項目方法效果更好。
內(nèi)核項目的指向:Project Properties-Build-Dependencies
調(diào)試功能和工具
Runtime Object View
可以獲得任務(wù)堆棧峰值、當(dāng)前正在運行的線程等信息。
打開ROV:Tools-Runtime Object View
BIOS-Scan for errors是確定RTOS是否處于錯誤狀態(tài)的快速簡便方法(例如,堆棧損壞、由于應(yīng)用程序指針錯誤或緩沖區(qū)溢出而導(dǎo)致的數(shù)據(jù)損壞等)。
System Analyzer
可直觀地查看關(guān)鍵項目,例如執(zhí)行圖、CPU負載、代碼段的平均/最大/最小執(zhí)行時間等。