RISC-V 是基于精简指令集(RISC)原则的开源指令集架构(ISA),具有广泛的应用前景。本文将使用兆易创新的GD32VF103V-EVAL开发板,基于IAR EWRISC-V工具链,介绍如何将FreeRTOS移植到GD32VF103,并使用Percepio的Tracealyzer工具验证移植的结果。
GD32VF103 RISC-V内核 MCU
GD32VF103VBT6采用了Nuclei 的Bumblebee内核,支持RV32IMAC指令集;支持机器模式和用户模式,提高软件安全性。寄存器组包含32个通用寄存器、RISC-V标准的状态寄存器及内核自定义的CSR寄存器。内核提供了一个计时器单元(timer Unit,TIMER),产生的计时器中断和软件中断可以用于RTOS时钟节拍处理和任务切换。
Bumblebee 内核提供了在 RISC-V CLIC 基础上优化而来的“改进型内核中断控制器(Enhanced Core Local Interrupt Controller, ECLIC)”,用于管理所有的中断源。ECLC的每个中断源可以配置为向量或非向量处理模式。
FreeRTOS和Tracealyzer
Amazon FreeRTOS目前应用非常广泛的一款RTOS,遵循MIT license。FreeRTOS提供了针对IAR及GCC工具链的标准RISC-V内核移植示例,支持32位及64位架构内核。FreeRTOS支持抢占和时间片轮询两种任务调度方式,支持无限数量的应用任务。
Tracealyzer工具运行在Windows或Linux PC上,可用于目标系统运行RTOS行为分析,能够快速、轻松地收集多任务软件有用和有意义的行为。可以快速集成到现有的开发环境,通过快照模式或流模式采集系统运行时数据。提供超过30种视图可视化RTOS运行时行为,,帮助开发人员解决问题,提高软件的可靠性,改善软件的性能。
FreeRTOS 移植到 GD32VF103
FreeRTOS内核绝大部分都采用C语言编写,只有与处理器相关的上下文切换采用汇编语言实现,目的是为了保证上下文切换的效率。移植的关键要点是实现:
1、开启和关闭中断的方式;
2. 进入和退出临界区的方式;
3、产生周期性的中断,作为系统的时钟节拍;
4、任务的上下文切换;
中断管理和临界区实现
GD32VF103的ECLIC中断控制器有一个中断目标阈值级别寄存器(mth),优先级别低于该阈值的中断将不会被响应。在移植FreeRTOS时,通过设置mth来实现开关中断,对于优先级别比阈值高的中断则不受FreeRTOS管理,中断不存在额外的延迟。
代码的临界区也称为代码的临界段,这部分代码在执行时不允许被打断。FreeRTOS的临界区通过关中断来实现,在进入临界段之前须关中断,而临界段代码执行完毕后,要立即开中断。
|