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

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

3天内不再提示

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

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

接着以WCH沁恒微电子的赤菟V103(CH32V103)和赤菟V307(CH32V307)两款RISC-V内核单片机来详细说下针对RISC-V平台,移植实时操作系统的注意点。

今天聊下移植RTOS时RISC-V内核时单片机切换至第一个任务。

RT-Thread为例,rt-thread和其他RTOS有点区别的是其gcc下的入口函数定义为entry,而main函数则可以被初始化为线程之一,图1为rt-thread的详细的启动流程。rt-thread定义一个rt_thread类型的全局指针rt_current_thread,用于实时获取当前运行的线程。从图9可知,硬件启动后进rtthread_startup,其开始进行了必要的初始化,如系统滴答定时器、堆、串口、调度器、定时器、main线程、空闲idle线程等等,最后执行了rt_system_scheduler_start后转交调度器执行。其内容如下图2所示。

poYBAGECCgiAaInbAAEs3dd2mrs534.png

图1 rt_thread启动流程

pYYBAGPYrEuAWC6IAADViZVU80o027.png

图2 调度器启动

由图2可知,其会查找优先级较高的就绪组优先级,并根据该优先级查找就绪链表,获取优先级较高的任务并得到控制块to_thread,然后调用rt_hw_context_switch_to切换至该任务。其是一段汇编实现的代码,传入的参数为该任务的sp指针。由前文可知,我们可以根据to_thread->sp得到该任务的堆栈位置,该堆栈的顶部空间存储了执行该任务时cpu寄存器的值,由此也可推测该部分汇编代码主要完成的就是从sp处恢复cpu寄存器值,并转而执行该任务。其代码如下图3所示,详见注释。

poYBAGPYrEuAa2jJAAEViOd45Vo522.png

poYBAGPYrEuAcgnxAABtrxtHDbE317.png

图3 切换至第一个任务

由上注释分析可知,rt_hw_context_switch_to通过传入的sp,恢复cpu寄存器,其中mepc寄存器任务初始化时设置为任务的入口地址,ra寄存器设置为返回地址,其指向公用函数_rt_thread_exit。 当mret返回后,pc更新为mepc值,即转向执行任务函数,若其不是一个持续执行的[while(1)]函数,那么其返回至_rt_thread_exit,删除该任务,并切换至其他任务。 由此也可理解图2中,最后一句注释“never

come back”的含义了,一旦开始执行任务,pc值被改变,再不会回到调用的地方。

其他RTOS中也有和此汇编函数类似的汇编实现,例如liteOS_M中的HalStartToRun,TencentOS_Tiny中的port_sched_start等。

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

    关注

    5999

    文章

    43966

    浏览量

    620734
  • 移植
    +关注

    关注

    1

    文章

    367

    浏览量

    27854
  • RTOS
    +关注

    关注

    20

    文章

    775

    浏览量

    118781
  • 实时操作系统

    关注

    1

    文章

    182

    浏览量

    30505
  • RISC-V
    +关注

    关注

    41

    文章

    1897

    浏览量

    45044
收藏 人收藏

    评论

    相关推荐

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

    是华为公司开发的新一代物联网操作系统系统RISC-V单片机是不同于ARM架构的单片机,目前形势一片大好。在美国对我国芯片以及
    发表于 01-20 13:31

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

    的新一代物联网操作系统系统RISC-V单片机不同于ARM架构的单片机RISC-V+鸿蒙,目
    发表于 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内核架构的芯片移植工作

    取决于 RTOS 如何实现当然,也可以使用 Software interrupt 来做任务切换, libcpu/risc-v/nuclei 这里的内核移植,就是使用了 Software interrupt
    发表于 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

    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 5268次阅读

    转载: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实时操作系统(一)

      ARM上移植实时操作系统大家可能比较熟悉,且例程较多,对于RISC-V内核单片机,可能相对
    的头像 发表于 01-31 12:08 2044次阅读
    基于<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实时操作系统(二)

      今天聊下移植RTOSRISC-V内核单片机任务栈保存哪些内容。
    的头像 发表于 01-31 13:50 1330次阅读
    基于<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>(四)

    FreeRTOS:一个迷你的实时操作系统内核

    、协程等,可基本满足较小系统的需要。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时
    的头像 发表于 06-29 17:15 516次阅读
    FreeRTOS:一个迷你的<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b><b class='flag-5'>内核</b>