0

MSP430のプロジェクトでスタックオーバーフローを見つけようとしていますが、スタックがかなりいっぱいになった後にIRQが発生したときに主に発生することがわかりました。

スタックの開始アドレスよりも小さい値でスタックポインター書き込みにブレークポイントを設定しましたが、CPUはIRQハンドラーで停止します。

IAR C-SPYの呼び出しスタックの表示は、ハンドラー関数で終了しますが、これがスタックを埋めたものであるため、これより下にあるものに関心があります。

現在の割り込みハンドラの下にコールスタックを表示する方法はありますか?

4

1 に答える 1

0

割り込みハンドラーがCで記述されている場合、生成されたCFI(呼び出しフレーム情報)は割り込み関数に対しても正しいはずなので、これは正しく機能するはずです。

ただし、これが(何らかの理由で)機能しない場合、または割り込みルーチンが(適切なCFIディレクティブなしで)アセンブラーで記述されている場合は、ちょっとしたトリックを使用できます。レジスタウィンドウでPCとSPのレジスタを手動で変更するには、スタックからPCを取得し、関数内で調整された量のSPを「バックアップ」します。この後、デバッガーは割り込みが発生したときに実行されていた関数を表示します。

従来のMSP430コアでは、PCはプレーンな16ビット値として保存されることに注意してください。ただし、MSP430Xコアでは、20ビットがステータスレジスタと少し絡み合っています。詳細については、アーキテクチャのマニュアルを参照してください。

于 2011-03-11T09:10:39.413 に答える