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

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

3天内不再提示

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

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

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

今天聊下移植RTOS时RISC-V内核时单片机任务之间的切换。

了解了如何切换至第一个任务,如何实现不同任务之间的切换呢。在这之前想必对“任务优先级”,“时间片轮转”等概念有一定的了解。rt-thread正常运行也需要个定时器为其提供时钟,且任务初始化时设置了任务优先级。调度器在就绪的任务列表中寻找优先级较高的任务切换执行,当优先级相同时,调度器会按照设置的时间片大小来轮流调度线程,用时间片来约束任务的单次执行时长。不管因优先级还是时间片耗尽,从当前任务切换至新任务时均需要保存当前任务的上下文至当前任务的堆栈区,获取新任务的堆栈,并从新任务堆栈区恢复上下文,切换并执行。

ARM中,系统的滴答时钟由内核定时器Systick提供,并且在pendSV中进行任务切换。类比RISC-V我们内核提供了一个64bit
Systick定时器,同时也有软中断SW_handler(其实整个切换也不一定要在某个中断中切换,只要做好上下文保存即可),需要切换时,置位其相应的pend位,即可触发进中断,实现切换。rt-thread中用了三个全局变量,用于中断切换上下文rt_interrupt_from_thread、rt_interrupt_to_thread、rt_thread_switch_interrupt_flag,前两个分别用来存储“from”线程sp指针和“to”线程的sp指针,当需要切换时,flag被函数rt_hw_context_switch_interrupt置位,并触发进软中断如图1所示。在中断中实现“from”到“to”线程的切换,并将flag清零。

poYBAGPYrKSAZiuGAABE-NeiilA166.png

图1 中断切换上下文

SW中断函数同样是一段汇编实现的代码,内容如下图2所示,其中重点代码已经给出注释,注意查看。从注释可以看出,其相较于启动第一个任务多了开头的就任务保存的过程。值得注意的是赤菟V307支持进中断后将硬件压栈临时关闭,这样在上下文切换的时候可以手动恢复我们想要的寄存器值,而当中断返回后,硬件压栈自动打开,不影响其他外设中断使用硬件压栈。而对于没有此功能的赤菟V103来说,移植操作系统时不能打开硬件压栈。

pYYBAGPYrKSAUQ0IAADXExXVYe8165.png

pYYBAGPYrKSAO2twAADWwU_WUEw289.png

poYBAGPYrKSAdsYgAADfNG-MR6Y703.png

pYYBAGPYrKSAE_HWAABU5HjQY-Y047.png

poYBAGPYrKSAAqmUAADocBEAGP0756.png

图2 软中断切换上下文过程

对于其他的RTOS也是大同小异,例如鸿蒙LiteOS_M中有个g_losTask全局变量,其是个结构体,内部为两个任务控制块类型的指针,分别为*runTask指向当前运行的任务,newTask指向要切换的新任务,腾讯的TencentOS_Tiny中亦有两个任务控制块类型的指针k_curr_task指向当前任务,*k_next_task指向下一个要切换任务。这和rt-thread中的“from”和“to”是为异曲同工之处。通过管理操作这些变量,实现任务到任务的切换。

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

    关注

    6001

    文章

    43973

    浏览量

    620825
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39846
  • 移植
    +关注

    关注

    1

    文章

    367

    浏览量

    27854
  • 实时操作系统

    关注

    1

    文章

    184

    浏览量

    30515
  • RISC-V
    +关注

    关注

    41

    文章

    1901

    浏览量

    45045
收藏 人收藏

    评论

    相关推荐

    STC16实验箱上的RTOS实时多任务操作系统介绍

    “uCx51_SYS_Core_V2_V83.h”头文件了解。(5)采用操作系统的第个优点是系统通常已经集成了最基本的外部设备已经对它们的控制程序,这就为用户提供了在线现场
    发表于 06-01 09:49

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

    转载: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 2049次阅读
    基于<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 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 1523次阅读
    基于<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 518次阅读
    FreeRTOS:一个迷你的<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b><b class='flag-5'>内核</b>