Renode应用:在RISC-V核上运行FreeRTOS
Posted 牧羊女说
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Renode应用:在RISC-V核上运行FreeRTOS相关的知识,希望对你有一定的参考价值。
本篇记录通过Renode在RISC-V核上运行FreeRTOS demo的情况。本来不准备写这一篇,但是发现近期工作学习密度实在太大,上周工作的中间结果这周竟然完全想不起来了,不得不又花了一些时间从头摸索着重新配置了一遍,好记性是没指望了,只能依赖烂笔头。
该例中使用的是MiFive M2GL025开发板(当然,是通过Renode模拟的),集成开发环境是SoftConsole,具体可以参考:RTOS Demo for RISC-V MiFive M2GL025 / Renode - FreeRTOS
一. 准备工作
在开始之前,先准备好所有的素材:
1. FreeRTOS源码
FreeRTOS源码下载地址如下:
FreeRTOS - Free RTOS Source Code Directory Structure
该套源码中包含了FreeRTOS核心代码,以及在各个平台上的应用代码,另外,包含了很多个Demo,我们运行的Demo就在其中。源码包的结构如下:
+-FreeRTOS-Plus Contains FreeRTOS+ components and demo projects.
|
+-FreeRTOS Contains the FreeRTOS real time kernel source
| files and demo projects
|
|
+-Source The core FreeRTOS kernel files
| |
| +-include The core FreeRTOS kernel header files
| |
| +-Portable Processor specific code.
| |
| +-Compiler x All the ports supported for compiler x
| +-Compiler y All the ports supported for compiler y
| +-MemMang The sample heap implementations
|
+-Demo
|
+-Common The demo application files that are used by all the demos.
+-Dir x The demo application build files for port x
+-Dir y The demo application build files for port y
FreeRTOS核心代码放在FreeRTOS/Source目录下,主要在三个文件中:tasks.c, queue.c和list.c,同时,该目录下还包含两个可选文件timers.c和croutine.c,分别用以实现软件定时器和co-routines。
对于FreeRTOS支持的每一种处理器,都有少量基于该架构的RTOS代码,这部分代码作为可移植部分,放在FreeRTOS/Source/Portable目录下。
FreeRTOS/Demo目录下放置了很多预置好的演示用例,通过指令集名称+仿真平台+编译器等命名,例如我们要运行的Demo名称为:RISC-V_Renode_Emulator_SoftConsole。
2. SoftConsole
本篇描述的Demo通过Softconsole集成开发环境编译运行,下载地址如下:
该开发环境将外部工具例如Renode也集成了进去,因此使用起来较为方便。
二. 代码编译
这次仍然运行LED闪烁的Demo。通过两个任务之间的交互来完成LED闪烁:发送任务每隔1秒(在Renode上为虚拟秒)将一个数值送入队列;接收任务在接收到该数值时(队列为空时接收任务会被阻塞),将字符串“Blink”打印到Renode控制台。
1. 导入工程
通过File->Import导入已有工程:
在Import Projects页面,选择FreeRTOS/Demo/RISC-V_Renode_Emulator_SoftConsole目录,如下图:
点击“Finish”完成导入。
2. 编译
在“Project”菜单选择“Build All”进行编译。
三. 运行
1. 工具配置
完成编译后,会生成目标文件RTOSDemo.elf,放在Debug目录下:
接下来,我们通过SoftConsole内嵌的Renode工具,仿真MiFive M2GL025平台,并运行该目标文件。
首先,我们需要配置外部工具,选择“Run”->“External Tools”->"External Tools Configuration",如下图所示:
点击进入后,在"Program"上右键点击新建Configuration,在出现的窗口中填写如下几项内容:
其中,Arguments为Renode的输入参数,可以为空,也就是启动一个空的Renode,启动后再往里面依次创建machine、load platform、load binary、start等步骤,方便起见,可以把这些步骤写入一个RESC描述文件中,上图中的RESC文件为本人修改后的文件,内容如下:
2. 运行
完成以上第三方工具配置后,点击“Run”运行,输出如下:
以上是关于Renode应用:在RISC-V核上运行FreeRTOS的主要内容,如果未能解决你的问题,请参考以下文章
为什么要把进程/线程绑定到特定cpu核上运行?(cpu core id coreIdx)opdevsdk_sys_bindThreadCoreId()
在 Picorv32 / 蜂鸟 E203 软核上运行 RT-Thread