HPM SDK 1.6.0 FreeRTOS LTS更改及适配指南

描述

 

 

1、HPM_SDK FreeRTOS LTS特性总览

HPM SDK V1.6.0中FreeRTOS升级前后特性支持对比:

特性

V10.4.4

LTS 202210.01

中断抢占

RISCV浮点扩展支持

RISCV中断向量模式支持

×

Tickless mode支持

×

DSP扩展支持

×

 

二、FreeRTOS新特性适配

 

2.1 支持tickless模式

HPM_SDK1.6.0中使能了FreeRTOS的tickless模式,根据SOC进入低功耗模式的级别不同,分为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)

 

两种模式区别:

1. Wait模式下,只有CPU会进入低功耗模式,CPU核心时钟会被关闭。但在收到中断时 CPU 能够立即唤醒进行处理。不会影响外设和SOC其他模块的工作状态。理论上会影响中断响应的实时性,除此外不会有其他影响。

2. Stop模式下,CPU会进入低功耗模式,并且会触发SOC的低功耗状态,允许关闭更多的资源,且提供灵活的配置选项。除了会影响中断响应的实时性外,一些外设的功能可能会受影响。

 

关于低功耗两种模式差异的详细解释,开发者可以查看UM手册的低功耗管理章节。

 

2.2 riscv中断向量模式

在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中取消了vTaskEnterCriticalvTaskExitCritical接口,取而代之的是portENTER_CRITICALportEXIT_CRITICAL。用户需要将用户层代码进行修改以适配FreeRTOS的升级。

SDK

 

2.4 增加了对DSP上下文的保存和恢复

在HPM_SDK V1.6.0中,可以在FreeRTOS中正常使用dsp扩展了。参考samples/dsp中CMakeLists中的配置。

 

2.5 portCRITICAL_NESTING_IN_TCB宏的值从1改为0

此改动是FreeRTOS的riscv port部分的改动,它会使任务TCB中原有的变量uxCriticalNesting被删除。如果用户的代码中使用了此变量,或者有手动解析TCB内容的代码,那么需要进行代码修改工作,使用全局变量xCriticalNesting可以替代TCB中的uxCriticalNesting;反之不需要进行修改。

SDK

 

三、在HPM_SDK1.6.0中使用之前版本的FreeRTOS

在HPM_SDK V1.6.0中使用之前版本的FreeRTOS,有两种方式:


 

方式一

直接将middleware/FreeRTOS目录替换成老版本的middleware/FreeRTOS目录。


 

方式二

在middleware目录下增加老版本的源码,此时SDK中同时存在两个版本的Free RTOS,依靠工程CMakeLists.txt中的配置进行选择。

1. 将老版本的middleware/FreeRTOS文件夹重命名为middleware/FreeRTOS_old,并复制到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),其他地方不需要修改。

SDK

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分