一部のコードで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を無視しないのですか?
このコードは例外ハンドラでテストしていますか? –
もちろんです。私は例外ハンドラに行きたくはありません。 – Morriell
もう一度説明を読んで、他の人があなたの問題を見てくれることを期待してください。 –