接着以WCH沁恒微电子的赤菟V103(CH32V103)和赤菟V307(CH32V307)两款RISC-V内核芯片来详细说下针对RISC-V平台,移植实时操作系统的注意点。
今天聊下移植RTOS时RISC-V内核时单片机任务栈保存哪些内容。
上一章中列举了所有的寄存器,当需要切换任务时刻的寄存器值,除x0恒为0,其他的寄存器无法预知其值,切换时均需要保存(gp寄存器编译好后,固定不变,理论上可以不操作,为保持一致性和完整性,一并保存),如果使用浮点,还应该包括浮点寄存器。每个RTOS均会定义一个和上下文保存相关的结构体,以rt-thread为例,可以看到如下图1的数据结构定义。

图1 上下文保存结构体
可以看到除了通用寄存器外,还有两个前文提到的成员mepc、mstatus,其中mstatus中含有中断的使能控制位,而mepc为机器模式下异常程序指针寄存器,其值会在执行mret后更新给pc,我们正式通过设置该寄存器的值来控制程序

本文详细介绍了在RISC-V内核的MCU(如WCH的CH32V103和CH32V307)上移植RTOS时,如何保存任务栈内容。讨论了在任务切换时需要保存的寄存器,包括通用寄存器、mepc和mstatus,并展示了rt-thread中线程栈初始化的过程。线程栈用于存储CPU寄存器值和线程运行时的变量,rt_thread结构体则用于管理线程的堆栈信息。
最低0.47元/天 解锁文章
1670

被折叠的 条评论
为什么被折叠?



