2017-07-06 3 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

このコードは例外ハンドラでテストしていますか? –

+0

もちろんです。私は例外ハンドラに行きたくはありません。 – Morriell

+0

もう一度説明を読んで、他の人があなたの問題を見てくれることを期待してください。 –

答えて

0

Cortex-M4デバイス汎用ユーザガイド第4.3.9章。

システムハンドラを無効にして、対応する障害が発生すると、プロセッサはその障害をハード障害として扱います。

他のCortex-Mの亜種も同じように動作します。

関連する問題