創建RTX5項目工程比較簡單,RTX5源碼已經內置在keil安裝目錄下。下面一步一步創建工程。
1.Create a new project,選擇一個器件,在Manage Run-TIme Environment 窗口選擇 CMSIS::CORE and CMSIS::RTOS2 (API)::Keil RTX5,可以選擇添加LIB庫到工程,也可以選擇將Source源碼添加到工程。如果選中RTX5之后,下方輸出欄提示需要其他的組件,可以點擊Resolve一鍵處理,自動添加需要的組件到工程中。
2.在RTX_Config.h中配置RTX5。注意:全局動態內存大小是RTX所能使用的內存大小,不能超過所選器件的RAM大小,不然編譯不通過。
3.Cortex-M的中斷使用
在Cortex-M處理器中,RTX5使用下面三個中斷。
Handler | Priority | Interrupt/Exception |
---|---|---|
SysTick | lowest | Kernel system timer interrupt to generate periodic timer ticks |
PendSV | lowest | PendSV (request for system-level service) when calling certain RTX functions from Handler mode |
SVC | lowest+1 | Supervisor Call used to enter the RTOS kernel from Thread mode |
其他設備中斷用戶可以正常使用,對於 Cortex-M3/M4/M7 /M23/M33/M35P 處理器,RTX內核不會關閉中斷。
Usage of interrupt priority grouping
- 中斷優先級分組應該在調用osKernelStart()函數之前使用CMSIS-Core函數NVIC_SetPriorityGrouping進行配置。RTX內核使用優先級組的值來設置SysTick和PendSV中斷的優先級
- RTX內核為上表中列出的中斷/異常設置優先級,並使用最低的兩個優先級級別。
- 不要改變RTX內核使用的優先級。如果無法避免,請確保SysTick/PendSV的搶占優先級低於SVC。
- 允許的優先級組值為0 ~ 6。優先級組值7將導致RTX失敗,因為只有一個優先級級別可用。
- 主堆棧用於運行RTX功能。因此,需要為RTX內核執行配置足夠的堆棧。
Code Example
osKernelInitialize(); // initialize RTX NVIC_SetPriorityGrouping (3); // setup priority grouping tread_id = osThreadNew(tread_func, NULL, NULL); // create some threads osKernelStart (); // start RTX kernel
RTX5教程:RTX教程已內置在keil安裝目錄中,../Keil_v5/ARM/Pack/ARM/CMSIS/5.8.0/CMSIS/Documentation/RTOS2/html/rtx5_impl.html