2017-07-06 250 views
-1

我想禁止一些代碼段的BusFault出口的上升。我想有可能使異常上升的標誌,但不會增加任何類型的處理程序。編程手冊(PM0214,p.230)中對BFHFNMIGN位的描述與我正在查找的內容完全相同:「使優先級爲-1或-2的處理程序忽略由加載和存儲指令導致的數據總線故障< ..> 」。 這是我的嘗試:如何選擇性地禁用BusFault異常並將其升級到HardFault,並啓用其他異常?

SCB->SHCSR ^= SCB_SHCSR_BUSFAULTENA_Msk; //Disable only BusFault_Handler 
SCB->CCR |= SCB_CCR_BFHFNMIGN_Msk; //Enable BFHFNMIGN 
*(uint32_t *)(0x000FFFFE) = 0xAA; //Test if BFHFNMIGN flag works 
i+=1; //Any stuff 

我希望執行走得更遠,但「任何東西」行之後,如果我沒有用過BFHFNMIGN位執行獲取到HardFault_Handler。在調試器的幫助下,我通過地址來檢查BFHFNMIGN位是否已設置,並且其他寄存器中是否存在BusFault的所有屬性。 那麼爲什麼HardFault不會忽略BusFault?

+0

您是否正在測試此代碼_in_異常處理程序? –

+0

當然不是。問題是我不想去異常處理程序。 – Morriell

+0

然後再閱讀說明,並期待其他人查看您的問題。 –

回答

0

Cortex-M4設備通用用戶指南第4.3.9章。明確指出:

如果您禁用系統處理程序併發生相應的故障,處理器將故障視爲硬故障。

其他Cortex-M的變種應該表現在以同樣的方式。