尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

UCosIII 在 Tang Nano 20K 的 SparrowRV 软核移植

UCosIII 在 Tang Nano 20K 的 SparrowRV 软核移植
📅 发布时间:2026/6/19 13:25:41

一直想完整的完成从FPGA到RTOS再到基础APP完成整个流程的理解,于是,尝试在开源的小麻雀操作系统上移植最简单的UCos-III移植,但由于不懂Verilog,所以磕磕碰碰,以下是其记录:

准备工作

由于使用的是一块小小的 Tang Nano 20K 开发板,其芯片为高云的 GW2AR-18C,且 SparrowRV 的作者已经提供了该开发板的移植实例工程,只需要在上面改一改就可以用了。

  1. 搭建高云的开发环境,从官网下载最新版即可;
  2. 在Gitee上拉取 SparrowRV ;
  3. 搭建Bsp的开发环境,这里使用的是Windows上的 MounRiver Studio,这个商业版或社区版都行;
  4. 拉取UCos-III的源码,去UCos-III GitHub这里,一般只需要拉uC-OS3、uC-CPU、uC-LIB这三个即可;

移植准备

  1. 首先,得保证FPGA工程可以综合的过,由于高云教育版软件的更新,fpga/gowin_tang_nano_20k 目录下以前的工程直接综合会报错,提示FPIOA引脚电压错误,将其改为3.3V,即LVCMOS33;
  2. 此时可以发现很多FPIOA依旧没有连接到物理引脚上,由于本次只用到了Uart0的Tx口,更具原理图可以得到实际Uart0的Tx引脚是69,将FPIOA的Location改为69,并将Pull Mode改为None;
  3. 此时综合将不再报错;
  4. 打开bsp/bsp_app里的MounRiver Studio工程,最新版本是基于VsCode开发的,不是以前的Eclipse开发的;
  5. 直接编译工程,编译通过即可确保拉下来的是没有问题的;
  6. 将拉取下来的三个文件夹放到工程根目录下开发环境将会自动添加这些文件夹到项目内;
  7. 删除工程内除RISCV架构相关的其他架构的文件(注意不要把Cfg文件夹删了);

开始移植

  1. 配置工程,在设置工程属性里添加头文件目录和汇编文件目录并关闭优化:

Snipaste_2025-10-05_11-46-41

Snipaste_2025-10-05_11-47-08

Snipaste_2025-10-05_11-47-18

  1. 修改Ports文件夹下的相关文件,这里是关于移植的东西:

os_cpu_a.S

这里关于总中断的地方不用改,因为其CSR寄存器遵循了标准。但是关于软中断切换和主动触发的地方要改:

点击查看代码
.equ  RISCV_CSR_MSIP,            0x345           # 添加自定义CSR软中断寄存器地址(写1触发软中断)#-------------------------------------------------------------------------------------------------OSCtxSw:
OSIntCtxSw:
# MIE_MSIE -- 启用软件中断位li     t0, RISCV_MIE_MSIEcsrrs  zero, mie, t0# 这将触发一个同步软件中断 MSIP = 0x01;csrrsi x0, RISCV_CSR_MSIP, 1ret#-------------------------------------------------------------------------------------------------Software_IRQHandler:
# 禁用全局中断并防止上下文切换期间的中断li     t0, RISCV_MSTATUS_MIEcsrrc  zero, mstatus, t0# 清除 hart0 的软件中断,MSIP = 0x01;csrrsi x0, RISCV_CSR_MSIP, 0...

安装中断

想要UCos-III跑起来,主要需要安装两个中断函数,它们都在Ports内,分别是 Software_IRQHandler 和 SysTick_Handler。
由于 SysTick_Handler 和示例Bsp里的函数重名了,这里直接注释掉 trap_handle.c 里的定义就好,注意不要注释掉声明,因为它声明使用了 __attribute__((interrupt("machine"))) 。
然后在 trap_handle.c 里直接调用UCos的Software_IRQHandler。

Snipaste_2025-10-05_12-05-27

Snipaste_2025-10-05_12-06-09

调用系统

在 main 里调用 OSInit 、 OSStart ,顺带创建个任务。

image

到这里移植就基本结束了,接下来就是写两个简单的任务。

基础应用

编写两个任务:

image

image

完成。

相关新闻

  • SIP抓包工具 SIP抓包 SIP抓包
  • Asp.Net Core SignalR的协议协商挑战
  • 251005

最新新闻

  • 软件测试基础:黑盒、白盒、灰盒测试
  • 2026年工业工厂吸尘器Top3:Shiwosi史沃斯凭什么第一? - 工业清洁测评社
  • 多智能体系统中的向量化声誉传播机制TrustFlow解析
  • Qwen3vl多模态后训练实战:LLamaFactory深度适配指南
  • 国产MLU算网+LLaMA-Factory:零代码微调百余大模型实战指南
  • 猫抓插件:3步搞定浏览器资源嗅探的终极指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号