0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RISC-V内核单片机移植RTOS实时操作系统(一)

CHANBAEK 来源:CSDN-借过风景 作者:CSDN-借过风景 2023-01-31 12:08 次阅读

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全局指针,用来寻址全局变量。

poYBAGPYk3eAFTd8AAHqW9qrr3s910.png

图1 RISC-V寄存器

RISC-V内核进中断需要保存caller saved(顾名思义,调用者需要保存)的寄存器。 当不开启硬件浮点时,编译器会把16个寄存器在中断函数开始时存入堆栈,中断返回前恢复,如下图2和图3所示。 我们内核支持硬件压栈,硬件保存和恢复的也正是这16个寄存器。 使用硬件压栈时需要使能硬件功能,即硬件压栈使能(不同芯片配置位置不同,详见手册中断章节),同时也需要通知编译器不自动生成图2和图3中的软件出入栈的代码,即在MRS声明中断函数时由__attribute__((interrupt("WCH-Interrupt-fast")))方式定义编译器不自动添加软件出入栈代码, 由__attribute__((interrupt()))方式定义编译器添加软件出入栈的代码。

pYYBAGPYk3eAEDR6AACf8EMfqRk260.png

图2 整形寄存器入栈

pYYBAGPYk3eADGk3AACGkj2mKOw060.png

图3 整形寄存器出栈

当开启硬件压栈并且编译器中声明使用硬件压栈后,中断函数汇编代码如下图4所示。 可见进入中断后直接执行的中断代码,形如图2和图3中的16个寄存器的入栈和出栈由硬件在中断开始和结束时自动完成。 同时也可以看出整个中断函数可以减少34条指令。

pYYBAGPYk3eAJYPPAAC03o1uPqQ012.png

图4 开启硬件压栈后中断函数汇编代码

由此也可知道前文说的一般中断切换上下文时不开启硬件压栈的原因:开启后中断返回时硬件会复写16个caller saved寄存器。

当开启硬件浮点时,除了上述16个整形还会增加20个浮点寄存器,如下图5所示。 由此也可以看出,硬件压栈只对整形的寄存器生效。

poYBAGPYk3eAeIhtAACn65lMYK4894.png

pYYBAGPYk3eAJu4zAACii2XralM873.png

图5 浮点寄存器出入栈

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6037

    文章

    44558

    浏览量

    635271
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9097

    浏览量

    367550
  • RTOS
    +关注

    关注

    22

    文章

    813

    浏览量

    119636
  • 实时操作系统

    关注

    1

    文章

    198

    浏览量

    30758
  • RISC-V
    +关注

    关注

    45

    文章

    2277

    浏览量

    46159
收藏 人收藏

    评论

    相关推荐

    risc-v的mcu对RTOS兼容性如何

    RISC-V的MCU对RTOS实时操作系统)的兼容性主要取决于多个因素,包括RTOS的版本、RISC-
    发表于 05-27 16:26

    RISC-V中***会子活动之:基于RISC-V的鸿蒙开发板设计

    的新代物联网操作系统系统RISC-V单片机不同于ARM架构的单片机
    发表于 06-03 16:26

    RISC-V MCU开发 ():集成开发环境

    RISC-V系列单片机中断硬件自动保存上下文功能的支持。在包含通用RISC-V/ARM项目开发功能的基础上,MRS还集成了跨内核单片机工程
    发表于 09-22 14:44

    如何实现RISC-V内核架构的芯片移植工作

    处理时钟节拍Cache (可选)libcpu 移植相关 API 介绍RISC-V 内核移植RT-Thread RISC-V 内核架构介绍在
    发表于 03-25 10:11

    基于RT-Thread操作系统衍生rt-smart实时操作系统简介

    ,例如 ARM Cortex-A 系列芯片,MIPS 芯片,带 MMU 的 RISC-V 芯片等。rt-smart 在 RT-Thread 操作系统的基础上启用独立、完整的进程方式,同时以混合微内核模式
    发表于 06-22 17:56

    基于实时操作系统单片机应用系统设计

    介绍了Small RTOS 51 多任务操作系统的基本原理,结合单片机控制的电子存包柜,简要介绍了移植small RTOS51 及通过消息队
    发表于 01-06 16:21 51次下载

    RISC-V会是道曙光吗?RISC-V与RUST相遇引发操作系统教学新尝试

    身为研究操作系统的老师,陈渝认为,RISC-V精简指令集听起来属于硬件范畴,但是其实RISC-V与软件有很大的相关性,因为作为重要系统软件的操作系统
    的头像 发表于 04-28 18:57 1.6w次阅读

    关于单片机与嵌入式、操作系统RTOS之间的关系详解

    这篇文章我们就来聊下关于单片机与嵌入式、操作系统RTOS 之间的那些事!通过这篇文章,让你操作系统
    的头像 发表于 03-29 14:20 7867次阅读
    关于<b class='flag-5'>单片机</b>与嵌入式、<b class='flag-5'>操作系统</b>与 <b class='flag-5'>RTOS</b>之间的关系详解

    实时操作系统Free RTOS的详细介绍

    ,可基本满足较小系统的需要。 由于RTOS需占用定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数
    发表于 06-21 14:30 6264次阅读

    转载:DIY:给单片机写个实时操作系统内核

    转载:DIY:给单片机写个实时操作系统内核
    发表于 11-13 19:36 1次下载
    转载:DIY:给<b class='flag-5'>单片机</b>写个<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b><b class='flag-5'>内核</b>!

    基于精简指令集的RISC-V内核单片机

    RISC-V就不必多说了,详细大家都了解。它是个基于精简指令集的开源指令集架构。与主流的主流的架构为x86与ARM架构不同,其特点就是完全开源。今天跟大家起盘点下国产
    的头像 发表于 10-17 16:49 2273次阅读

    基于RISC-V内核单片机移植RTOS实时操作系统(二)

      今天聊下移植RTOSRISC-V内核单片机任务栈保存哪些内容。
    的头像 发表于 01-31 13:50 1647次阅读
    基于<b class='flag-5'>RISC-V</b><b class='flag-5'>内核</b><b class='flag-5'>单片机</b><b class='flag-5'>移植</b><b class='flag-5'>RTOS</b><b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>(二)

    基于RISC-V内核单片机移植RTOS实时操作系统(三)

      接着以WCH沁恒微电子的赤菟V103(CH32V103)和赤菟V307(CH32V307)两款RISC-V
    的头像 发表于 01-31 13:52 1841次阅读
    基于<b class='flag-5'>RISC-V</b><b class='flag-5'>内核</b><b class='flag-5'>单片机</b><b class='flag-5'>移植</b><b class='flag-5'>RTOS</b><b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>(三)

    基于RISC-V内核单片机移植RTOS实时操作系统(四)

     接着以WCH沁恒微电子的赤菟V103(CH32V103)和赤菟V307(CH32V307)两款RISC-V
    的头像 发表于 01-31 13:54 1495次阅读
    基于<b class='flag-5'>RISC-V</b><b class='flag-5'>内核</b><b class='flag-5'>单片机</b><b class='flag-5'>移植</b><b class='flag-5'>RTOS</b><b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>(四)

    Green Hills Software 为 Imagination RISC-V CPU 增加量产就绪的 RTOS 和工具支持

    认证的实时操作系统RTOS)以增强生态系统支持。该合作将继续扩展到 ImaginationCatapult CPU 系列的未来产品上。 µ- veloSity
    的头像 发表于 07-06 10:15 564次阅读
    Green Hills Software 为 Imagination <b class='flag-5'>RISC-V</b> CPU 增加量产就绪的 <b class='flag-5'>RTOS</b> 和工具支持