我們知道,CH32V203支持8級(jí)中斷嵌套(部分型號(hào)支持2級(jí)嵌套)
在中斷已經(jīng)嵌套到8級(jí)時(shí),再發(fā)生HardFault,會(huì)發(fā)生什么?會(huì)立即進(jìn)入HardFault中斷,也就是說(shuō)發(fā)生9級(jí)嵌套嗎?
如果沒(méi)有進(jìn)入HardFault中斷,CPU會(huì)如何處理異常的指令?比如在8級(jí)嵌套的中斷中,內(nèi)存訪問(wèn)沒(méi)有對(duì)齊4字節(jié),如果沒(méi)有進(jìn)入HardFault,指令訪問(wèn)的結(jié)果會(huì)是什么樣的?
我需要再HardFault發(fā)生時(shí),退出當(dāng)前執(zhí)行的程序模塊,但是這個(gè)異常發(fā)生時(shí),中斷的情況是不確定的:
可能是中斷中發(fā)生異常,也可能是主函數(shù)中發(fā)生異常。
那么在HardFault發(fā)生后,如何知道異常的指令發(fā)生在嵌套的中斷中還是主函數(shù)中?如何知道嵌套的層數(shù)?
現(xiàn)在在遇到HardFault后,操作系統(tǒng)會(huì)結(jié)束發(fā)生異常的線程,轉(zhuǎn)而執(zhí)行其他線程。
如果異常發(fā)生在嵌套的中斷中(比如發(fā)生了2級(jí)嵌套),如果進(jìn)入HardFault后不退出這些嵌套的中斷,就會(huì)有兩個(gè)問(wèn)題:
1)中斷優(yōu)先級(jí)低于上述中斷的其他中斷會(huì)被阻塞;2)中斷硬件壓棧處于被占用的狀態(tài)。
所以,在知道嵌套的層數(shù)后,如何讓嵌套的中斷全部返回?