乐趣区

关于嵌入式:RISCV移植rtthread-nano到riscv芯片

本文由 RT-Thread 论坛用户 @DENGCHOW 原创公布:https://club.rt-thread.org/as…

“这么说吧,就是为了这口醋,我才包的这顿饺子。”

仓库地址:https://gitee.com/dengchow/yu…

〇、前言

本文记录的是在 risc-v 芯片上移植 rt-thread nano 的过程。

应用到的 risc-v 芯片是玉衡(YuHeng,yuheng-riscv),一款并不存在于事实世界的芯片,同 picorv32 和 darkriscv 一样,仅存在与仿真环境中。

一、硬件平台

玉衡(YuHeng,yuheng-riscv)基于开源 RISC-V 指令集架构,是一款极简的 32 位 RISC-V 处理器核。仅用于检测和试验。

玉衡不具备任何商用价值,但能够作为很好的学习平台。

应用玉衡,可能很好的理解计算机体系结构、操作系统、通信协议、编译原理等相干常识。
另外,所有的运行环境均为精简搭建,因而还能够很轻易的相熟搭建过程。

不仅会用,还要晓得为什么会用。是当初设计的初衷。

特点与性能

  1. 反对 RV32IMFD 扩大指令集,通过 RISC- V 指令兼容性测试
  2. 采纳五级流水线设计:IF、ID、EX、MEM、WB
  3. 采纳自定义的总线设计:RBM(RISC-V Bus Matrix)
  4. 反对中断:矢量中断和非矢量中断
  5. 反对多种外设:UART、TIMER 等
  6. 反对 C 程序运行
  7. 反对 RT-Thread Nano 3.1.5
  8. 反对 UART 模拟器,可在仿真环境中进行调试

二、软件平台

rtthread nano 的版本是 3.1.5,间接从官网上下载的。

之所以不应用完整版 rt-thread,是因为我集体认为 rt-thread 的精髓是 kernel 和 FinSH。

因而 rtthread nano 足够了。

其实基本的起因是 YuHeng 上只有最最根本的外设,除了 UART 就是 TIMER。羞愧。

三、移植过程

移植过程比拟非凡,因为是先有的 rtthread nano,而后才去革新的 yuheng-riscv。

最终成果

  • 应用我的项目中给出的运行脚本,能够间接创立出 Vivado 工程。
  • 为了不便 Simulation,设计一个 uart_monitor,有了它之后,就能够间接在 testbench 中捕获 UART 的输入。

  • 仿真是比较慢的。

  • 因为是在 Vivado 上进行 Simulation,能够监督任何一个信号。

  • 从 wave 和 log 两个角度进行后果输入。

接下来,介绍一下移植过程。

移植过程

rtthread 调度线程的时候应用到 rt_hw_context_switchrt_hw_context_switch_to 两个函数。

而这两个函数理论并没有真的去切换线程,在 ARM Cortex 中会触发 PendSV 中断,在 PendSV 中实现的线程切换。

在中科蓝讯的 ab32vg1 中,是有一个 low_prio_irq 的,作用和 PendSV 是一样的。

很难堪,yuheng-riscv 中是没有相似的设置。

在设计 yuheng-riscv 是只有非矢量中断的,即只有一个固定的中断 trap_handler,而后通过软件来构建中断向量表。
sdk\rtthread-nano\interrupt.c 中所示。

本着尽量不改变 rtthread nano 源码的出发点,决定对 yuheng-riscv 的中断机制进行批改。

  • 减少硬件中断向量表。

  • 减少 soft_handler 中断用于线程切换。

残余的移植工作如 tick 的增加,UART 的增加,这个就不做介绍了,毕竟 rtthread nano 中通过 TODO 都进行标识了。
一步一步的批改增加即可。

四、总结

总之,rtthread 还是很敌对的。

整体来说 yuheng-riscv 还只是一个 demo,性能是有了,性能还是差不少。

“醋还行,饺子差点。”

退出移动版