我们知道,CH32V203支持8级中断嵌套(部分型号支持2级嵌套)
在中断已经嵌套到8级时,再发生HardFault,会发生什么?会立即进入HardFault中断,也就是说发生9级嵌套吗?
如果没有进入HardFault中断,CPU会如何处理异常的指令?比如在8级嵌套的中断中,内存访问没有对齐4字节,如果没有进入HardFault,指令访问的结果会是什么样的?
我需要再HardFault发生时,退出当前执行的程序模块,但是这个异常发生时,中断的情况是不确定的:
可能是中断中发生异常,也可能是主函数中发生异常。
那么在HardFault发生后,如何知道异常的指令发生在嵌套的中断中还是主函数中?如何知道嵌套的层数?
现在在遇到HardFault后,操作系统会结束发生异常的线程,转而执行其他线程。
如果异常发生在嵌套的中断中(比如发生了2级嵌套),如果进入HardFault后不退出这些嵌套的中断,就会有两个问题:
1)中断优先级低于上述中断的其他中断会被阻塞;2)中断硬件压栈处于被占用的状态。
所以,在知道嵌套的层数后,如何让嵌套的中断全部返回?