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 浮点寄存器出入栈

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

    关注

    6000

    文章

    43969

    浏览量

    620766
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8648

    浏览量

    361747
  • RTOS
    +关注

    关注

    20

    文章

    775

    浏览量

    118781
  • 实时操作系统

    关注

    1

    文章

    182

    浏览量

    30506
  • RISC-V
    +关注

    关注

    41

    文章

    1898

    浏览量

    45044
收藏 人收藏

    评论

    相关推荐

    【项目实战】基于RISC-V单片机的鸿蒙开发板项目

    是华为公司开发的新代物联网操作系统系统RISC-V单片机是不同于ARM架构的单片机,目前形势
    发表于 01-20 13:31

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

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

    RISC-V单片机快速入门01-开发环境搭建 相关资料下载

    前言:从今天开始,我们学习使用RT_Thread国产实时操作系统开发兆易公司推出的RISC-V芯片-GD32VF103CB,IDE使用芯来科技推出的Nuclei Studio IDE,本节我们先完成
    发表于 07-01 08: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移植教程(FreeRTOS、STM32、RISC-V

    1、单片机移植FreeRTOS实时操作系统移植FreeRTOS比较简单。仅需要注意以下几点:1.系统
    发表于 06-16 14:49

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

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

    RISC-V MCU开发实战() :DHT11

    单片机中断硬件自动保存上下文功能的支持。在包含通用RISC-V/ARM项目开发功能的基础上,MRS还集成了跨内核单片机工程转换接口,实现ARM内核
    发表于 03-06 15:17

    51单片机能否移植free RTOS操作系统?

    用的是stc8a8k64s单片机,能否在里面移植RTOS操作系统
    发表于 11-03 06:39

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

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

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

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

    转载: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内核单片机移植RTOS实时操作系统(二)

      今天聊下移植RTOSRISC-V内核单片机任务栈保存哪些内容。
    的头像 发表于 01-31 13:50 1332次阅读
    基于<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内核单片机来详细说下针对RISC-V平台,
    的头像 发表于 01-31 13:52 1520次阅读
    基于<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内核单片机来详细说下针对RISC-V平台,
    的头像 发表于 01-31 13:54 1030次阅读
    基于<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>(四)