本文由RT-Thread論壇用戶@DENGCHOW原創發布:https://club.rt-thread.org/ask/article/3187.html
“這么說吧,就是為了這口醋,我才包的這頓餃子,”
倉庫地址:https://gitee.com/dengchow/yuheng-riscv-soc.git
〇、前言
本文記錄的是在 risc-v 芯片上移植 rt-thread nano 的程序,
使用到的 risc-v 芯片是玉衡(YuHeng,yuheng-riscv),一款并不存在于現實世界的芯片,同 picorv32 和 darkriscv 一樣,僅存在與仿真環境中,
一、硬體平臺
玉衡(YuHeng,yuheng-riscv)基于開源 RISC-V 指令集架構,是一款極簡的 32 位 RISC-V 處理器核,僅用于檢測和實驗,
玉衡不具備任何商用價值,但可以作為很好的學習平臺,
使用玉衡,能夠很好的了解計算機體系結構、作業系統、通信協議、編譯原理等相關知識,
另外,所有的運行環境均為精簡搭建,因此還可以很輕易的熟悉搭建程序,
不僅會用,還要知道為什么會用,是當初設計的初衷,
特點與功能
-
支持 RV32IMFD 擴展指令集,通過RISC-V指令兼容性測驗
-
采用五級流水線設計:IF、ID、EX、MEM、WB
-
采用自定義的總線設計:RBM(RISC-V Bus Matrix)
-
支持中斷:矢量中斷和非矢量中斷
-
支持多種外設: UART、TIMER 等
-
支持 C 程式運行
-
支持 RT-Thread Nano 3.1.5
-
支持 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_switch 和 rt_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,功能是有了,性能還是差不少,
“醋還行,餃子差點,”

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/377200.html
標籤:其他
上一篇:亞太區56%的中小企業遭受網路攻擊,企業云上安全該如何防護?
下一篇:STM32學習筆記—I2C通信
