Cortex-M3異常戻り値EXC_RETURN

【EXC_RETURN】

例外サービスプログラムを入力した後、ハードウェアが自動的に特別なEXC_RETURNのLR値を更新します。
例外サービスルーチンからのリターンは、このEXC_RETURN値がPCに送られた場合には、例外ハンドラ割り込み復帰シーケンスを開始します。
LR EXC_RETURNの値は、ハードウェアによって自動的に設定されているので、そう長く特別なニーズとして、それを変更しないでください。
ハイリターンだけビット、すべての[3:0]が1の28である値は、特別な意味を持っています。ビットセグメント次のように:


以下のように、正当なEXC_RETURN値3があります。

  • メインプログラムは、スレッド・モードで動作している場合、及びMSPを使用する場合に中断され、その後、サービスプログラムLR = 0xFFFFFFF9に(LRが自動的にスタックにプッシュされる前にメインプログラムが中断されました)。
  • メインプログラムは、スレッド・モードで動作している場合、およびPSPを使用するときに中断されたサービスプログラムで、次にLR = 0xFFFFFFFD(LRがスタックに自動的にプッシュされる前にメインプログラムが中断されました)。
  • メインプログラムはハンドラモードで実行している場合は、サービスルーチンLR = 0xFFFFFFF1(LRメインプログラムが自動的にスタックにプッシュ中断される前に)。これは時に割り込みサービスルーチン先取りすることが実際には、より多くの可能性が高い、いわゆる「プログラム」です。実際には、ネストの時に、より深いISRは常にLR 0xFFFFFFF1を参照してください。

[異常時のLR値(スレッドモードはメインスタックを使用)EXC_RETURNに設定されている]

[LR値がEXC_RETURNに設定されている例外時(スレッドモードはプロセススタックを使用します)]

[注]

  • CPU割り込みを入力することが自動的に設定されている場合LR値が、間違いがないだろう、そこにはおそらく、なぜLR値は、割り込み違法終了となりますか?一つだけの理由:割り込みルーチンはLRの値を変更し、間違いを犯します。
  • EXC_RETURN形式から見ると、我々はリターンアドレスとして任意の0xFFFFFFF0〜0xFFFFFFFFのに対処することはできません。Cortex-M3は、「ゾーンを取得していない」と記され、この範囲を持っているので、実際には、間違いの心配はありませんでした。

 


  参照からの引用:

"のCortex-MコアレクチャーシリーズとSTM32- 2チュートリアル.PDF"

"ARMのCortex-M3決定的なガイドの.pdf"

おすすめ

転載: www.cnblogs.com/utank/p/11263073.html