CH32V203的【异常中断 (HardFault)】会和其他中断嵌套吗?

我们知道,CH32V203支持8级中断嵌套(部分型号支持2级嵌套)

在中断已经嵌套到8级时,再发生HardFault,会发生什么?会立即进入HardFault中断,也就是说发生9级嵌套吗?

如果没有进入HardFault中断,CPU会如何处理异常的指令?比如在8级嵌套的中断中,内存访问没有对齐4字节,如果没有进入HardFault,指令访问的结果会是什么样的?


我需要再HardFault发生时,退出当前执行的程序模块,但是这个异常发生时,中断的情况是不确定的:

可能是中断中发生异常,也可能是主函数中发生异常

那么在HardFault发生后,如何知道异常的指令发生在嵌套的中断中还是主函数中?如何知道嵌套的层数?


现在在遇到HardFault后,操作系统会结束发生异常的线程,转而执行其他线程。

如果异常发生在嵌套的中断中(比如发生了2级嵌套),如果进入HardFault后不退出这些嵌套的中断,就会有两个问题:

1)中断优先级低于上述中断的其他中断会被阻塞;2)中断硬件压栈处于被占用的状态。

所以,在知道嵌套的层数后,如何让嵌套的中断全部返回?


您好,一般进HardFault的原因是程序产生异常,中断函数是不影响异常的发生的,进入HardFault的原因可以通过mcause寄存器来查看,当前异常指令的PC值可以通过mepc寄存器查看。下帖是对于进HardFault问题查找思路,可以看一下。

https://www.cnblogs.com/wchmcu/p/17545931.html

 


只有登录才能回复,可以选择微信账号登录