RISC-V MCU移植RTOS系列教程(四)

本文详细介绍了在RISC-V内核的单片机,如WCH的CH32V103和CH32V307上移植RTOS时的任务切换。讲解了任务优先级、时间片轮转的概念,以及如何利用Systick定时器和软中断SW_handler进行任务切换。在中断中,通过保存和恢复上下文,实现了任务之间的平滑过渡。对于支持硬件压栈关闭的MCU,如CH32V307,上下文切换更为灵活,而在不支持的MCU上,如CH32V103,需要手动管理寄存器。不同RTOS系统,如鸿蒙LiteOS_M和TencentOS_Tiny,都通过类似的方式来管理任务切换。
摘要由CSDN通过智能技术生成

接着以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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值