【树莓派Pico 2 RP2350开发板】 测评 [五] 基于RP2350的ARM和RISC-V的RTOS移植
[复制链接]
本帖最后由 御坂10032号 于 2025-3-12 22:48 编辑
简介
在测评三中我们实现了基于RP2040的FREERTOS的工程移植. 成功的在RP2350开发板上运行了RTOS. 但是并不清楚是否会存在一些未知的BUG. 因此在我寻觅和查阅诸多资料后,终于是找到了办法来将freertos进行基于RP2350的移植. 这里踩了很多坑. 我这里仅仅将正确的步骤放上来仅供大家学习.
移植步骤
在测评三中我们使用的是 基于RP2040的移植, 同样,我们需要将这个项目clone到本地. 然后我们需要在它这个项目上进行一些修改.
首先clone这个仓库到本地
git clone https://github.com/LearnEmbeddedSystems/rp2040-freertos-template.git
然后初始化子模块
git submodule update --init --recursive
需要注意的是,这里的子模块初始化的时候会下载freertos的内核到lib下,但是有可能会出现下载下来的内核库文件比较旧的情况.从而导致在第三方移植的时候并没有对rp2350的支持.
如上图所示为正常的文件架构, 但是可能在某些情况存在缺失. 如果存在缺失的话可以自行到Freertos的官方仓库进行下载然后拷贝到这里即可.
我这里在它原本的项目上做了一些修改,首先支持多个处理器结构的切换
# 使用RP2040的移植
# include(${FREERTOS_KERNEL_PATH}/portable/ThirdParty/GCC/RP2040/FreeRTOS_Kernel_import.cmake)
#使用RP2350基于ARM的移植
include(${FREERTOS_KERNEL_PATH}/portable/ThirdParty/Community-Supported-Ports/GCC/RP2350_ARM_NTZ/FreeRTOS_Kernel_import.cmake)
#使用RP2350基于RISC-V的移植
# include(${FREERTOS_KERNEL_PATH}/portable/ThirdParty/Community-Supported-Ports/GCC/RP2350_RISC-V/FreeRTOS_Kernel_import.cmake)
用户只需要在cmake list里注释对应的架构即可. 其次我在Src下的子cmakelist里增加了uart的支持, 这样可以使其下载一次之后可以重复下载,不需要每次复位还可以日志打印
pico_enable_stdio_uart(${ProjectName} 0)
# 开启默认的UART通讯
pico_enable_stdio_usb(${ProjectName} 1)
然后修改了固件的生成位置, 使其可以直接使用pico插件进行烧录.
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
还有一些其他的修改这里不一一列举了.
使用教程
为了避免每次使用的时候都需要移植非常麻烦 ,我这里给大家提供一个我移植好的模版. 已经在GITHUB上开源. 大家可以使用我提供的模版. 仅仅使用几个命令就可以来构建你的RTOS项目.
功能列表核心支持
1. ARM核心
2. RISC-V核心
使用说明
1. Clone当前的仓库到你本地
git clone https://github.com/mz1874/rp2350-rtos-template.git
2. 初始化子模块
cd rp2350-rtos-template
git submodule update --init --recursive
3. 打开项目
code .
4. 使用PICO拓展插件切换芯片的架构
可以选择启用RISC-V或者ARM
5. 在Cmakelist里根据你选择的架构切换当前移植文件(也可以选择RP2040的), 如下所示, 打开对应的注释即可使用对应的移植环境
# 使用RP2040的移植
include(${FREERTOS_KERNEL_PATH}/portable/ThirdParty/GCC/RP2040/FreeRTOS_Kernel_import.cmake)
#使用RP2350基于ARM的移植
include(${FREERTOS_KERNEL_PATH}/portable/ThirdParty/Community-Supported-Ports/GCC/RP2350_ARM_NTZ/FreeRTOS_Kernel_import.cmake)
#使用RP2350基于RISC-V的移植
include(${FREERTOS_KERNEL_PATH}/portable/ThirdParty/Community-Supported-Ports/GCC/RP2350_RISC-V/FreeRTOS_Kernel_import.cmake)
6. 编译和烧录
已知的问题
在使用RISC-V核心的时候FreeRTOSConfig.h配置文件中, 如果配置的为单核心,那么将会不可用, 必须配置为双核心,并且将configUSE_CORE_AFFINITY 配置为1, 如果使用ARM核心将不会有这个问题.
```
#define configNUMBER_OF_CORES 1
#define configTICK_CORE 0
#define configRUN_MULTIPLE_PRIORITIES 0
#define configUSE_CORE_AFFINITY 0
```
**下面的为正确的配置**
```
#define configNUMBER_OF_CORES 2
#define configTICK_CORE 0
#define configRUN_MULTIPLE_PRIORITIES 0
#define configUSE_CORE_AFFINITY 1
```
问题: 频繁切换结构导致PICO插件报错, 无法编译项目
解决办法: 删除 build文件夹, 然后重新新建build文件夹, 进入到build目录然后执行`cmake ..` 然后Clean Cmake.再重新编辑即可
项目已经开源在GITHUB, 欢迎大家下载试用!, 仓库地址
|