4

私は現在 IAR Embedded Workbench を使用して、NXP LPC2378 micro の開発を行っています。CPU がクラッシュし続けるため、IRQ と CSTACK を大きくする必要があるという問題が発生していると思います。これらの領域が周囲のメモリ領域に「流出」することに気付きました。これらのメモリ領域と他のメモリ領域が何に使用されているのか、私は本当に理解していないと思いますか? ISR 用に RAM を予約する RTOS (CMX) を使用していますが、これは別のもののようです。

RTOS を使用している場合に使用される IRQ_STACK、CSTACK、SVC_STACK、FIQ_STACK、UND_STACK、および ABT_STACK は何ですか? またはそれらはまったく別のものですか?

4

1 に答える 1

5

LPC23XX にはいくつかの異なるモードがあります。各モードには独自のスタックがあります。割り込みのようなものには、とりわけ、別のモードに切り替える前に、コンテキストレジスタを(現在のモードのスタックに保存すると思います)モードを切り替えることが含まれます。

RTOS を使用しているからといって、これらのスタックの目的が変わるわけではありませんが、RTOS にはそれらに関する要件がある場合があります (CMX について調べる必要がある場合があります)。

  • IRQ_STACK- 割り込み (IRQ) モード スタック。
  • CSTACK- ユーザー モードとシステム モードのスタック。これは、ほとんどの場合、コード実行用の通常のスタックです。
  • SVC_STACK- スーパーバイザー モード スタック。一部の命令は、SVC モードでのみ実行できます。IIRC CPU はこのモードで起動し、初期設定が完了すると終了します。
  • FIQ_STACK- FIQ 割り込みモード スタック。高速割り込み (FIQ) は、IRQ 中に発生する可能性があります。これは、優先度の高い IRQ のようなものです。FIQ では、FIQ と IRQ は無効になります。
  • UND_STACK未定義の命令モード スタック。
  • ABT_STACKデータアボートなどのためのアボートモードスタック。(アボートがトリガーされたときに実行されるようにハンドラーを設定できます。)

私は IAR に詳しくありませんが、これらがサイズである場合、uVisionでは 、 、 、、UND_Stack_Sizeと同等です。または同等のものは、最初の 5 つの合計でなければなりません。SVC_Stack_SizeABT_Stack_SizeFIQ_Stack_SizeIRQ_Stack_SizeUSR_Stack_SizeISR_Stack_Size

スタックをオーバーフローさせると、悪いことが起こることに注意してください。スタックを大きくする必要がある可能性は十分にありますが、私が言ったように、おそらく最小値を調べる必要があります。CMX に必要な値。

于 2012-11-09T01:58:59.103 に答える