HPM SDK V1.6.0中FreeRTOS升級前后特性支持對比:
特性 | V10.4.4 | LTS 202210.01 |
中斷搶占 | √ | √ |
RISCV浮點(diǎn)擴(kuò)展支持 | √ | √ |
RISCV中斷向量模式支持 | × | √ |
Tickless mode支持 | × | √ |
DSP擴(kuò)展支持 | × | √ |
二、FreeRTOS新特性適配
2.1 支持tickless模式
HPM_SDK1.6.0中使能了FreeRTOS的tickless模式,根據(jù)SOC進(jìn)入低功耗模式的級別不同,分為wait模式和stop模式。
使能wait模式:在CMakeLists.txt中增加set(CONFIG_FREERTOS_TICKLESS 1),參考例程:samples\rtos\freertos\freertos_tickless_wait_mode
set(CONFIG_FREERTOS 1)
set(CONFIG_FREERTOS_TICKLESS 1)
使能stop模式:在CMakeLists.txt中增加set(CONFIG_FREERTOS_TICKLESS 1)以及set(CONFIG_FREERTOS_TICKLESS_USE_STOP_MODE 1)參考例程:samples\rtos\freertos\freertos_tickless_stop_mode。
Set(CONFIG FREERTOS 1)
Set(CONFIG FREERTOS TICKLESS 1)
Set(CONFIG FREERTOS TICKLESS USE STOP MODE 1)
兩種模式區(qū)別:
1. Wait模式下,只有CPU會進(jìn)入低功耗模式,CPU核心時(shí)鐘會被關(guān)閉。但在收到中斷時(shí) CPU 能夠立即喚醒進(jìn)行處理。不會影響外設(shè)和SOC其他模塊的工作狀態(tài)。理論上會影響中斷響應(yīng)的實(shí)時(shí)性,除此外不會有其他影響。
2. Stop模式下,CPU會進(jìn)入低功耗模式,并且會觸發(fā)SOC的低功耗狀態(tài),允許關(guān)閉更多的資源,且提供靈活的配置選項(xiàng)。除了會影響中斷響應(yīng)的實(shí)時(shí)性外,一些外設(shè)的功能可能會受影響。
關(guān)于低功耗兩種模式差異的詳細(xì)解釋,開發(fā)者可以查看UM手冊的低功耗管理章節(jié)。
2.2riscv中斷向量模式
在CMakeLists.txt中將
sdk_compile_definitions(-DUSE_NONVECTOR_MODE=1)
改為sdk_compile_definitions(-DUSE_NONVECTOR_MODE=0)或者將其注釋掉或刪除即可。
向量模式支持gcc、segger、IAR。
2.3臨界段接口更改
FreeRTOS LTS202210.01 在RSIC-V中取消了vTaskEnterCritical和vTaskExitCritical接口,取而代之的是portENTER_CRITICAL和portEXIT_CRITICAL。用戶需要將用戶層代碼進(jìn)行修改以適配FreeRTOS的升級。
2.4 增加了對DSP上下文的保存和恢復(fù)
在HPM_SDK V1.6.0中,可以在FreeRTOS中正常使用dsp擴(kuò)展了。參考samples/dsp中CMakeLists中的配置。
2.5 portCRITICAL_NESTING_IN_TCB宏的值從1改為0
此改動(dòng)是FreeRTOS的riscv port部分的改動(dòng),它會使任務(wù)TCB中原有的變量uxCriticalNesting被刪除。如果用戶的代碼中使用了此變量,或者有手動(dòng)解析TCB內(nèi)容的代碼,那么需要進(jìn)行代碼修改工作,使用全局變量xCriticalNesting可以替代TCB中的uxCriticalNesting;反之不需要進(jìn)行修改。
三、在HPM_SDK1.6.0中使用之前版本的FreeRTOS
在HPM_SDK V1.6.0中使用之前版本的FreeRTOS,有兩種方式:
方式一
直接將middleware/FreeRTOS目錄替換成老版本的middleware/FreeRTOS目錄。
方式二
在middleware目錄下增加老版本的源碼,此時(shí)SDK中同時(shí)存在兩個(gè)版本的Free RTOS,依靠工程CMakeLists.txt中的配置進(jìn)行選擇。
1. 將老版本的middleware/FreeRTOS文件夾重命名為middleware/FreeRTOS_old,并復(fù)制到V1.6.0目錄下。
2.修改middleware/CMakeLists.txt,在文檔末尾增加add_subdirectory_ifdef(CONFIG_FREERTOS_OLD FreeRTOS_old)
3. 修改工程目錄下的CMakeLists.txt,將set(CONFIG_FREERTOS 1)修改為set(CONFIG_FREERTOS_OLD 1),其他地方不需要修改。
-
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62172 -
SDK
+關(guān)注
關(guān)注
3文章
1036瀏覽量
45935 -
HPM
+關(guān)注
關(guān)注
1文章
23瀏覽量
7746
發(fā)布評論請先 登錄
相關(guān)推薦
評論