CH32V203的【異常中斷 (HardFault)】會(huì)和其他中斷嵌套嗎?

我們知道,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ù)后,如何讓嵌套的中斷全部返回?


您好,一般進(jìn)HardFault的原因是程序產(chǎn)生異常,中斷函數(shù)是不影響異常的發(fā)生的,進(jìn)入HardFault的原因可以通過(guò)mcause寄存器來(lái)查看,當(dāng)前異常指令的PC值可以通過(guò)mepc寄存器查看。下帖是對(duì)于進(jìn)HardFault問(wèn)題查找思路,可以看一下。

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

?


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频