这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取手持数字示波器】GD32VF103任务上下文切换使用的CSR寄存器解析

共3条 1/1 1 跳转至

【换取手持数字示波器】GD32VF103任务上下文切换使用的CSR寄存器解析

工程师
2024-12-31 23:52:39     打赏

简介:                  

        在RTOS 的任务切换的时候,需要切换的两个任务分别用 from 和 to 来表示,from 任务是被切出(switchout)的任务,to 任务是要被切入(switchin)的任务。在任务切换的时候,RISC-V 架构的芯片form 任务需将任务切换相关的CSR 寄存器保存到任务栈中,并从 to 任务中栈中获取到上一次to 任务被打断的现场的CSR寄存器从而完成任务的切换,这个过程中涉及的CSR 寄存器有(mepc,mcause,msubm,mstatus),以下是Freertos 中出栈时将任务栈中的CSR 寄存器数值读加载到CSR寄存器的处理。

image.png

以下是保存CSR 寄存器的宏定义处理。

image.png

基于此我们逐个了解这些CSR寄存器的作用,首先来看下mepc寄存器,从以下寄存器的描述可知mepc 保存了异常返回地址信息

image.png

在FreeRtos 任务切换时定义了traceTASK_SWITCHED_OUT() 和 traceTASK_SWITCHED_IN() HOOK 函数我们在对应的hook函数内读取对应栈帧内的mepc 的值来确认任务返回地址信息。

image.png

image.png

修改代码添加对应的hook 函数,来hook  函数中打印任务名称和mpec 的值

image.png

image.png

运行结果如下,获取的mpec 的值和任务对应代码段地址空间和预期的一致,mpec 任务切换PC地址保存寄存器来使用在FreeRtos中。

image.png

验证完mpec CSR 寄存器后,我们继续了解mstatus 寄存器。

image.png

MIE:

image.png

MPIE和MPP:

image.png

image.png

添加测试代码在任务切换中读取mstatus 寄存器的值打印输出。

image.png

对应的打印结果为0x1880

image.png

对应mstatus 寄存器在进入异常时,对应MIE =0 MPIE =1(开启总中断)跟预期保持一致。

mcause 寄存器说明如下:

image.png

image.png

从上述mcause 寄存器的值可与i看出产生异常的原因为中断,对应的中断编码为3.对应3号中断为软中断MSIP

image.png

最后一个寄存器msubm 寄存器定义如下

image.png

打印结果为0x40,根据寄存器的定义可知TYP = 1 PTYP = 0,进入Trap 类型为中断,进入前为非Trap状态。

image.png

至此任务过程硬件自动保存的4个CSR寄存器功能就梳理完成了。

image.png






专家
2025-01-01 01:32:50     打赏
2楼

感谢楼主分享


专家
2025-01-01 04:01:38     打赏
3楼

看一下


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]