- 背景
e203处理器是一款RISC-V架构(RV32I)CPU为核心构建的开源MCU。笔者在e203处理器上开发自己的RTOS。了解RTOS对于中断的处理流程对于理解CPU上程序的运行模型非常重要。e203处理器官方提供的SDK中提供了对于中断处理的系统逻辑,使用SDK进行固件开发,尤其是standalone固件,默认无需关心相关的底层实现。本文对于SDK中提供的中断处理程序进行了分析,本文对相关内容做一记录。
2.相关理论
学习过任何一个操作系统或者阅读分析过任何一个操作系统(哪怕是RTOS)相关逻辑后都会了解中断上下文的大体处理过程。大致上中断发生时,操作系统首先需要保存中断上下文,然后切换到中断栈,执行注册的处理函数,切换回内核栈,恢复中断上下文等等。
不同架构上的实现主要差别在于上下文的内容会略有差异,另外像Linux内核这样的Rich OS实现细节上会复杂一些,RTOS的实现相对简单。
本文提到的SDK中的处理逻辑包含在200行内的汇编代码内,本文主要针对该汇编程序进行解读。
3.代码实现
SDK中对于中断的处理程序在hbird-sdk/SoC/hbirdv2/Common/Source/GCC/intexc_hbirdv2.S文件中。
上层逻辑如下:
首先保存中断上下文,保存一般寄存器的上下文内容。实现在宏定义SAVE_CONTEXT中。
可以看到首先为保存寄存器调整栈指针,留出存储空间。下面寄存器是一定要保存的:
编号 |
< |