歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊,請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)
- 簡介:
當我們使用STM32Cube IDE進行STM32 MCU的軟韌體開發時
若有透過STM32CubeMX工具勾選FreeRTOS
則STM32Cube IDE將會自動產生(長出)結合了ARM CMSIS介面層與third party RTOS(我們目前的狀況下就是FreeRTOS)的code出來,加入到我們的MCU開發專案檔中
本文將要介紹的code基本上都是由STM32Cube IDE所自動生成的code,將會追蹤一下這篇文章主題所要追蹤的一個小小部分的source code
而關於這方面的一些較詳細的部分,例如何謂CMSIS,與third party RTOS之間的關係為何? 未來應該會再另寫文章作介紹,若有興趣的讀者可先參考ST官方文件: UM1722 User manual- Developing applications on STM32Cube with RTOS 以及下方於此ST官方文件中的架構圖
![]() |
CMSIS-RTOS Architecture(圖片來源: ST官方文件) |
而這篇文章的重點會放在有關於CMSIS-OS wrapping layer(以下簡稱CMSIS)和FreeRTOS的task優先權號碼之對應與互轉相關的部分
基本上內容簡單,所以適合在BLOG將追蹤過程大致寫出來(技術過程太複雜的文章不太適合用BLOG寫)
註: 本例是用CMSIS-RTOS V1來實驗的 (現在已經有V2了)
---------------------
- 本文重點:
當我們在屬於應用程式層的main.c裡面,要藉由CMSIS API創建thread(在FreeRTOS裡面稱作task)時,會需要指定優先權。例如osPriorityHigh或osPriorityNormal即為列舉(enum)內的常數元素項目的名稱(而此數這個常數就是優先權號碼)
![]() |
osThreadDef 的第三個參數即為優先權號碼 |
而實際關於這部分的列舉型態宣告之內容如下圖:
![]() |
osPriority enum declaration in cmsis_os.h |
![]() |
FreeRTOSConfig.h |
![]() |
makeFreeRtosPriority和makeFreeRtosPriority API |
![]() |
osThreadCreate API |
![]() |
osThreadDef os_thread |
![]() |
os_thread_def struct |
【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】