400|3

221

帖子

4

TA的资源

纯净的硅(初级)

【树莓派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的支持.

image.png  

 

如上图所示为正常的文件架构, 但是可能在某些情况存在缺失. 如果存在缺失的话可以自行到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拓展插件切换芯片的架构

switch_board.png  

switch_architecture.png   

可以选择启用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. 编译和烧录

download.png  


已知的问题

在使用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.再重新编辑即可

img.png  

项目已经开源在GITHUB, 欢迎大家下载试用!, 仓库地址 

链接已隐藏,如需查看请登录或者注册

image.png  

最新回复

划重点了   详情 回复 发表于 2025-3-11 08:53

回复
举报

7002

帖子

0

TA的资源

五彩晶圆(高级)

在使用RISC-V核心的时候FreeRTOSConfig.h配置文件中, 如果配置的为单核心,那么将会不可用, 必须配置为双核心,并且将configUSE_CORE_AFFINITY 配置为1, 如果使用ARM核心将不会有这个问题.

感谢楼主提醒

点评

是的 否则会卡死  详情 回复 发表于 2025-3-11 12:36
划重点了  详情 回复 发表于 2025-3-11 08:53

回复

1万

帖子

202

TA的资源

管理员

Jacktang 发表于 2025-3-11 07:32 在使用RISC-V核心的时候FreeRTOSConfig.h配置文件中, 如果配置的为单核心,那么将会不可用, 必须配置为双 ...

划重点了

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!

回复

221

帖子

4

TA的资源

纯净的硅(初级)

Jacktang 发表于 2025-3-11 07:32 在使用RISC-V核心的时候FreeRTOSConfig.h配置文件中, 如果配置的为单核心,那么将会不可用, 必须配置为双 ...

是的 否则会卡死


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 3

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表