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

news/2025/10/5 12:28:27/文章来源:https://www.cnblogs.com/lanlincmos/p/19126466

一直想完整的完成从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_IRQHandlerSysTick_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 里调用 OSInitOSStart ,顺带创建个任务。

image

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

基础应用

编写两个任务:

image

image

完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学做网站培训班要多少钱家电网站源码

2019独角兽企业重金招聘Python工程师标准>>> 1.安装oracle客户端 2.配置文件 加增一个数据库的方式,是编辑 tnsnames.ora文件,在C:\Oracle\Ora81\NETWORK\ADMIN 目录下. 增加类似下面的信息 SVR236 (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL …

深入解析:Elasticsearch的集群管理介绍

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

SIP抓包工具 SIP抓包 SIP抓包

SIP抓包工具 SIP抓包 SIP抓包 CentOS 环境 sngrep 安装及使用在呼叫中心类应用开发过程中,经常需要对 SIP 信令抓包,分析排查问题。通常抓包的工具非常多样,如 Wireshark、tcpdump、ngrep 等都是可选项,但是针对…

2025声级计厂家最新权威推荐排行榜单! 数字声级计,精密声级计,防爆声级计,手持式声级计,剂量声级计公司推荐!

在噪声污染愈发受到重视的当下,从工业生产的机器轰鸣到城市交通的持续喧嚣,从建筑施工的阵阵嘈杂到日常环境中的各类声响,准确监测噪声强度成为管控污染的核心环节。而声级计作为专业测量工具,其品类丰富多样 ——…

US$78.85 KEYDIY KD ZB10-4 Universal Smart Remote Key (Start) 4 Buttons for Honda Type 5pcs/lot

KEYDIY KD ZB10-4 Universal Smart Remote Key (Start) 4 Buttons for Honda Type 5pcs/lot Manufacturer: KEYDIY Condition: New Buttons: 4 Color: Black Proximity / Smart / Keyless Go: Yes KEYDIY Remote Serie…

怎么套模板做网站建设众筹类网站

导航引言一、什么是配置中心二、常见的配置中心组件三、Nacos Config 入门四、Nacos Config 动态配置4.1 硬编码方式(默认支持动态生效)4.2 属性注入五、配置共享5.1 相同微服务不同环境间共享5.2 不同微服务配置共享六、Nacos Config 的几个概念总结引言…

深圳图派做的网站后台加什么做网站用win2008系统

作为DBA工作中都会遇到过数据库服务器CPU飙升的场景,我们该如何快速定位问题?又该如何快速找到具体是哪个SQL引发的CPU异常呢?下面我们说两个方法。聊聊MySQL中如何快速定位占用CPU过高的SQL。 技术人人都可以磨炼,但处理问题的思…

CPP中CAS std::chrono 信号量与Any类的手动达成

CPP中CAS std::chrono 信号量与Any类的手动达成2025-10-05 12:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display:…

网站开发公司的销售方式找客户在公司做网站

1 题目: 对于一个给定的链表,返回环的入口节点,如果没有环,返回null 拓展: 你能给出不利用额外空间的解法么? 代码: class Solution { public:ListNode *detectCycle(ListNode *head) {} …

网站怎么做301跳转网站标题作弊详解

使用这个bundle的例子:键入ready然后按tab就会生成下面的代码:$(document).ready(function() { }); 其中第二行被选中,这时在里面编写jquery代码即可. 如果要查看某个function的官方文档的话可以在键入的function之后使用快捷键ctrlh 查看. 关于bundle的下载 这里是一个textmat…

python中使用高并发分布式队列库celery的那些坑 - 指南

python中使用高并发分布式队列库celery的那些坑 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

实用指南:Appium如何支持ios真机测试

实用指南:Appium如何支持ios真机测试pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名计算机控制AI框架需求洞察

本文基于某知名计算机控制AI框架的文档和用户反馈,深入分析其核心功能特性和使用方式,并挖掘出用户提出的关键新需求,为产品迭代提供重要参考方向。a.内容描述核心功能定位:该项目是一个开源的智能GUI代理框架,旨…

无人机桥梁3D建模、巡检、检测的航线规划 - 详解

无人机桥梁3D建模、巡检、检测的航线规划 - 详解2025-10-05 12:03 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

低代码——表单生成器Form Generator详解(二)——从JSON配备项到动态渲染表单渲染

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Codeforces Round 1040 (Div. 1)

VP Codeforces Round 1040 (Div. 1),从中间开始做,一道都没有写完。我发现做 CF 上的题目(特别是前面的题)一定不要想的太深,要快速切换多种思路考虑A. Double Perspective 题解 skip 完整代码点击查看代码 #incl…

如何生成网站的二维码wordpress get_attached_media

1.MTE概念 MTE(内存标记扩展)是ARM v8.5-A新增的一项缓解内存安全的机制。在Android Linux现有的安全机制中,类似的机制有ASAN、HWSAN。但两者因为性能开销代价高昂,不适用于广泛部署(仅调试使用)。MTE当前…

实用指南:1039 Course List for Student

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

邢台wap网站建设开发html网页的软件有哪些

对泛型的一个自我理解 泛型的使用&#xff0c;实际上就像一个占位符一样&#xff0c; 我先预定义一个类型&#xff0c;这个类型具体是啥只有在真正使用的时候才知道。从某种角度来看&#xff0c;泛型很像这个 any 类型啊。泛型的定义语法 泛型的定义使用 <T> 的方式来定…

2025十一集训——Day3做题

A vjudge CF题意:一个图,选择一个回答,\(k/2\) 的独立集或者不大于 \(k\) 的环。考虑 \(k=n\) 如果是树直接黑白染色,否则必有环。 然后考虑出题人:“保证有解”,所以直接去一个 \(k\) 的联通块,按照 \(k=n\) 正…