arm上移植实时操作系统大家可能比较熟悉,且例程较多,对于risc-v内核的单片机,可能相对比较陌生。下面结合wch沁恒微电子的赤菟v103(ch32v103)和赤菟v307(ch32v307)两款risc-v内核芯片来详细说下针对risc-v平台,移植实时操作系统的注意点。
之所以选择赤菟v103和赤菟v307两个芯片主要是其极具代表性:首先,直观上其外设的使用方法和我们之前熟悉的f103,f107等是兼容的,这样降低了我们使用和移植时的难度,基于wch提供的外设库,我们以前上层的代码甚至于不用修改可直接使用。其次,赤菟v103是wch risc-v青稞内核家族中的青稞v3a内核,v307为青稞v4f内核,青稞v3内核支持rv32imac指令集,即除支持risc-v基本的32位整数指令集外,还支持硬件乘除法,原子指令,压缩指令。青稞v4f在青稞v3a的基础上增加了单精度硬件浮点,并且其性能也比青稞v3a高。除此所有的青稞v4内核还支持自定义压缩指令-xw扩展,包括以下指令c.lbu/c.lhu/c.sb/c.sh/c.lbusp/c.lhusp/c.sbsp/c.shsp。
这里需要注意的是一般情况下,移植rtos的时需要关闭硬件压栈,因为在切换任务时,我们希望自己控制出栈入栈的内容。但是针对青稞v4f核,csr 0x804中有增加控制位(bit5)gihwstknen(全局中断和硬件压栈关闭使能),可以进中断时置位该位,关闭中断和硬件压栈,我们手动保存当前线程栈,恢复新线程栈,中断mret返回后,硬件自动清除该位,恢复中断和硬件压栈使能。这样即可保证rtos下,硬件压栈可正常使用,保证rtos下的中断响应速度。
今天聊下需要移植rtos时risc-v内核单片机 需要保存的寄存器 。
risc-v寄存器如下图1所示,其中x0-x31为整形寄存器,f0-f31为浮点寄存器(青稞v3没有浮点寄存器)。 所有带caller的寄存器,当发生中断时需要保存,值得注意的是,wch的硬件压栈保存的寄存器仅仅保存整数的16个caller saved 寄存器。 正常一个中断函数的寄存器保存我们不用关心,编译器会帮我们做的很好。 但是当我们从一个汇编入口进中断函数的时候这些过程就不得不由我们自己来实现。 寄存器中几个相对特殊的x0恒为0,x1是返回地址寄存器ra,函数调用时用来存放返回地址,x2为堆栈指针sp,x3为gp全局指针,用来寻址全局变量。
图1 risc-v寄存器
risc-v内核进中断需要保存caller saved(顾名思义,调用者需要保存)的寄存器。 当不开启硬件浮点时,编译器会把16个寄存器在中断函数开始时存入堆栈,中断返回前恢复,如下图2和图3所示。 我们内核支持硬件压栈,硬件保存和恢复的也正是这16个寄存器。 使用硬件压栈时需要使能硬件功能,即硬件压栈使能(不同芯片配置位置不同,详见手册中断章节),同时也需要通知编译器不自动生成图2和图3中的软件出入栈的代码,即在mrs声明中断函数时由__attribute__((interrupt(wch-interrupt-fast)))方式定义编译器不自动添加软件出入栈代码, 由__attribute__((interrupt()))方式定义编译器添加软件出入栈的代码。
图2 整形寄存器入栈
图3 整形寄存器出栈
当开启硬件压栈并且编译器中声明使用硬件压栈后,中断函数汇编代码如下图4所示。 可见进入中断后直接执行的中断代码,形如图2和图3中的16个寄存器的入栈和出栈由硬件在中断开始和结束时自动完成。 同时也可以看出整个中断函数可以减少34条指令。
图4 开启硬件压栈后中断函数汇编代码
由此也可知道前文说的一般中断切换上下文时不开启硬件压栈的原因:开启后中断返回时硬件会复写16个caller saved寄存器。
当开启硬件浮点时,除了上述16个整形还会增加20个浮点寄存器,如下图5所示。 由此也可以看出,硬件压栈只对整形的寄存器生效。
图5 浮点寄存器出入栈
上市路三次皆折戟,专注矿机市场的嘉楠耘智正在筹划登陆科创板
中国联通联合华为公司IPv6+研究创新成果,荣获“2022年世界互联网领先科技成果”奖
为什么市面上几乎没有OLED显示器?
什么是放电器 放电器工作原理及使用方法
在设计PCB图时我们应注意什么?
基于RISC-V内核单片机移植RTOS实时操作系统(一)
上汽奥迪第一款车型很有可能会在2022年正式推出
严防处理器厂坐大 触控IC商戮力强化大尺寸OGS方案
李飞飞又多了一个新的身份——斯坦福以人为本人工智能研究院的联合主任
C语言的入门简介和三个简单的C语言程序详细说明
在制定物联网基础设施决策时需要考虑什么?
三星与台积电抢夺苹果订单 欲发展新扇出型晶圆级封装制程
汽车芯片未来的发展方向和机会
2N3055逆变器电路原理
成都建设全国首个5G规模组网试验体系,已经走在全国前列
车展上的增程式电动汽车,以理想的One吸引了很多的目光
中国联通王晓初:规划5万个5G基站已开通2.8万个
“鹞鹰”Ⅱ察打一体无人机首次试飞成功
应对功能安全标准,飞思卡尔完善汽车主动安全产品线
让你感受下OPPOR11这次发布会有多洋气,数十位重量级大咖力推!