スタックの役割:Q&Aで学ぶマイコン講座(30)(3/3 ページ)
例外処理が起きて、コンテキストがスタックされるときは、通常ハードウェア(割り込みコントローラー)が行います。これを「ハードウェアスタック」と呼びます。一方、関数実行によるサブルーティンを実行する際に、ソフトウェアで、PUSH命令を使ってコンテキストをスタックに保存し、復帰するときにPOP命令を使ってPOPさせます。このようにソフトウェアを使ってスタックする場合を「ソフトウェアスタック」と呼びます(図5参照)。
図5:ソフトウェアスタックの例(EWARMの例)
スタックに関して注意すべき点を以下に記載します。基本的には、スタックにコンテキストを保存したり、スタックからコンテキストを復帰する手順はマイコンによって異なります。各製品の仕様書を確認することが必要です。
- SPが示すアドレスは、最後にPUSHされたデータのRAMアドレスを示す場合と、次にPUSHされる場所を示す場合があります。(STM32F103の場合は後者。図6参照)
- PCは、中断した時点のアドレスを格納する場合と、中断したアドレスの次の命令のアドレスを格納する場合があります。
- アセンブルコードを使って、自分でスタックするプログラムを作った場合に、PUSH、POPの手順を間違えると、スタックを壊してしまいメインルーティンに戻れなくなったり、RAM内のデータを壊したりします。C言語を使い、統合ツールでコンパイルすることを強くお勧めします。全てスタックに保存されるとは限りません。スタックされる順番も製品によって異なります。図6にSTM32F103の場合を示します。スタックに保存されるのは、R0〜R3とR12とR14(LR)、R15(PC)と特殊レジスタのxPSCだけです。順番はR15(PC)→xPSR→R0〜R3とR12→R14(LR)です。その他のレジスタをスタックしたい場合には、ソフトウェアでPUSH命令、POP命令を使って行う必要があります。
図6:スタックされるコンテキストとSPの指すアドレス(STM32F103の例)
⇒連載バックナンバーはこちら
⇒次の記事を読む
- 割り込みハンドラとは?
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初心者の方からよく質問される「割り込みハンドラ/ハンドラモードとは?」です。
- オーバーランエラーの原因
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、中級者の方からよく質問される「オーバーランエラーの原因」についてです。
- マイコンとEEPROMを接続する方法を教えて
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。11回目は、上級者の方からよく質問される「マイコンとEEPROMを接続する方法」についてです。
- 未使用GPIO(汎用I/O)の処理はどうすれば良いの?
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。5回目は、初心者の方からよく質問される「未使用GPIO(汎用I/O)の処理はどうすれば良いの?」についてです。
- ラッチアップって何?
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。4回目は、「ラッチアップ」に関する質問です。ラッチアップの仕組みと対策もご紹介します。
- CISCとRISC、何が違う?
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。記念すべき1回目は、マイコン初心者の方からよく質問される「CISCとRISCの違い」についてです。
Copyright © ITmedia, Inc. All Rights Reserved.