SiFive HiFive1 RTOS 演示(RISC-V)
[RTOS 移植]
此页面记载了预配置的 Freedom Studio
(GCC) 和 IAR Embedded Workbench 的 RISC-V 项目,
这些项目构建并运行 FreeRTOS RISC-V 演示
(在 HiFive11 RevB
评估板上)。
重要提示!使用 SiFive RISC-V 移植的注意事项
使用此 RTOS 移植之前,请阅读以下所有要点。
- 在 RISC-V 核心上使用 FreeRTOS 的说明
- 源代码组织
- 演示应用程序功能
- 构建和运行 RTOS 演示应用程序 – Freedom Studio
- 构建和运行 RTOS 演示应用程序 – IAR
- RTOS 配置和使用详情
另请参阅常见问题:
我的应用程序未运行,问题可能出在哪里?
在 RISC-V 核心上使用 FreeRTOS 的说明
如果您不满足于仅仅运行本页所描述的演示,或者
如果想要创建自己的 RISC-V FreeRTOS 项目,请阅读相关文档页面。
这些页面会介绍
在 RISC-V 核心上运行 FreeRTOS 内核的基本信息。
FreeRTOS zip 文件下载包含所有 FreeRTOS 移植和
演示应用程序的源代码,因此包含的文件数量远远超过
使用 FreeRTOS HiFive1 RevB RISC-V 演示所需的文件。
请参阅
源代码组织页面,
了解 zip 文件的目录结构信息。
HiFive1 Freedom Studio 和 IAR 项目分别位于
/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_FreedomStudio
和
Demo/RISC-V_RV32_SiFive_HiFive1-RevB_IAR 目录下。
构建说明部分提供了更多信息。
在 RISC-V 架构上,额外的
freertos_risc_v_chip_specific_extensions.h 头文件
用于将基础 RISC-V RTOS 移植扩展到目标 RISC-V
可能实现的任意芯片特定扩展。 HiFive1 上的 SiFive 核心提供了一个核心本地中断器 (CLINT),
但除了基础 RISC-V 架构定义的寄存器外,它不实现其它任何寄存器
。 因此,它使用 freertos_risc_v_chip_specific_extensions.h 头文件,
该头文件位于 /FreeRTOS/Source/portable/[compiler]/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions
目录下。
SiFive HiFive1 RevB RISC-V 演示应用程序
功能
常量
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY(定义于
main.c 顶部)用于在简单 "blinky" 风格的入门项目
和更全面的测试和演示应用程序之间进行切换。
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1 时
当将
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1 时,
main() 会调用
main_blinky()。
main_blinky() 会创建使用两个任务和一个队列的基本示例,如下所示:
-
队列发送任务:
队列发送任务由 prvQueueSendTask() 函数实现。
它位于一个循环中,每秒都会向队列发送值 100
。
-
队列接收任务:
队列接收任务由 prvQueueReceiveTask()
函数实现。它位于一个循环中,
该循环会阻塞读取队列的尝试(任务被阻塞时不会消耗 CPU 周期),
每次从队列发送任务收到值 100 时,便会切换成蓝色 LED
。
由于队列发送任务每秒向队列写入一次,
因此队列接收任务也会每秒解除阻塞并切换 LED
。
当将 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0 时
当将
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0 时,
main() 会调用
main_full()。
main_full() 会创建标准演示任务的子集
。 所有 FreeRTOS 移植演示应用程序都使用标准演示任务。
这些任务没有特定的功能,创建它们仅为演示如何使用 FreeRTOS API
以及测试 RTOS 移植。
创建“检查”任务,定期检查标准
演示任务(包含自我监控代码),以确保所有任务
都按预期运行。 检查任务每次执行时都会切换为蓝色 LED 。
这提供了有关系统健康状况的
视觉反馈。 如果 LED 每3秒钟切换一次,
则检查任务未发现任何问题。 如果 LED 每 500 毫秒切换一次,则检查任务
在一个或多个任务中发现了问题。
重要提示:
如果目录结构体与
在官方 FreeRTOS zip 文件版本中使用的目录结构不同,则不会构建项目。
确保在将项目导入 Freedom Studio Eclipse 工作区时,
不要勾选 "copy projects into workspace"
复选框。
想要打开并构建 Freedom Studio RISC-V 项目,则需:
-
下载并安装 Freedom Studio 开发工具(下滑查看软件下载)。
-
启动 Freedom Studio,根据提示选择现有工作区,
或创建新的工作区。
-
在 Freedom Studio 的 "File" 菜单中选择 "Import..."。 "Import" 对话框
会打开。
-
在 Import 对话框中,选择 "General -> Existing Project into Workspace",
"Import Projects" 对话框随即打开。
将现有项目导入工作区
-
在 "Import Projects" 对话框中,导航到
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_FreedomStudio目录并选中此目录,
并确保没有选中 "copy projects into workspace"
复选框。
在 "Import Project" 对话框中选择
目录和项目。 点击放大。
-
在 "Import Projects" 对话框的 "Projects" 窗口中,选择 RTOS 演示项目,然后点击 "Finish"。
项目会被导入至您的 Eclipse 工作区。以下几个步骤仅为检查
编译器路径是否正确。
-
在 IDE 的 "Project" 菜单中选择 "Properties"。
-
在 "Properties" 窗口中,展开 "C/C++ Build" 菜单项,然后选择其中的 "Settings" 选项。
-
在 "Tool Settings" 子窗口中,选择 "Cross Settings"。
-
你要在此窗口中确保编译器的路径对您的安装来说是正确的。 下图
显示了安装 Freedom Studio 时使用已安装编译器的默认路径
- 尽管 GCC 版本号可能会
改变。
配置所需工具链的路径(点击放大)。
- 编译器路径正确时,在 "Properties" 窗口中,选择 "Apply and Close"。
-
在 Freedom Studio 的 "Project" 菜单中选择 “Build all”。 FreeRTOS 源码和
演示源文件构建时不应产生任何错误和警告
(尽管第三方驱动程序代码可能会生成警告),
并创建一个名为 RTOSDemo.elf 的文件。
要使用 Freedom Studio 对 HiFive1 RevB 板进行编程并调试 RTOS 演示,则需:
-
使用 USB 数据线将 HiFive1 RevB 板连接至您的主机。
-
单击调试速度按钮旁边的小箭头,
然后在弹出菜单中选择 "Debug Configurations..." 以调出
调试配置窗口。
调试速度按钮
-
在调试配置窗口中,双击 "SiFive GDB SEGGER J-Link Debugging"
以创建调试配置。
HiFive1 RevB 板内置 J-Link,您无需单独的
J-Link 接口。
创建 J-Link 调试配置
-
在调试配置中,单击 "Debug" 按钮对 HiFive1 RevB
RISC-V 评估板进行编程,并启动调试会话。此后
可使用普通的 Eclipse 调试菜单项运行和调试 RTOS 应用程序。
启动调试会话前,可能需要在调试配置中设置设备名称
。
在调试配置中设置设备名称
要打开并构建 IAR Embedded Workbench for RISC-V 项目,则需:
-
打开 /FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_IAR/RTOSDemo.eww
(在 IAR Embedded Workbench 的 RISC-V IDE 中)。
-
在 IDE 的 "Project" 菜单中选择 "Rebuild All"(或只需按 F7),
RTOS 演示应当构建,没有产生任何错误或警告,
但消息性的 #warning 信息除外。
要使用 IAR Embedded Workbench 对 HiFive1 RevB 板进行编程并调试 RTOS 演示,则需:
-
连接 IAR I-Jet 调试接口,该接口位于主机和
hiFive1 Reb B 开发板上标有 J1 的 10 针调试连接器之间。
连接至 HiFive1 评估板的 IAR I-Jet
-
在 IDE 的 "Project" 菜单中选择 "Download and Debug"(或按 CTRL+D )
对 HiFive1 RevB RISC-V 评估板进行编程并启动调试会话,
之后可使用正常的 IAR 调试菜单项运行和调试
RTOS 应用程序。
RTOS 移植的特定配置
本节内容与
在 RISC-V 核心上运行 FreeRTOS
的文档页面信息相关。
其他注意事项:
-
vPortEndScheduler() 尚未实现。
-
Source/Portable/MemMang/heap_4.c 包含在 RISC-V 项目中,
以提供 RTOS 内核所需的内存分配。
请参阅 API 文档的内存管理部分,
获取完整信息。
-
截至本文撰写之际,此演示尚不支持中断嵌套。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.