メディア

スタックの役割Q&Aで学ぶマイコン講座(30)(3/3 ページ)

» 2016年09月27日 11時30分 公開
前のページへ 1|2|3       

ハードウェアスタックとソフトウェアスタック

 例外処理が起きて、コンテキストがスタックされるときは、通常ハードウェア(割り込みコントローラー)が行います。これを「ハードウェアスタック」と呼びます。一方、関数実行によるサブルーティンを実行する際に、ソフトウェアで、PUSH命令を使ってコンテキストをスタックに保存し、復帰するときにPOP命令を使ってPOPさせます。このようにソフトウェアを使ってスタックする場合を「ソフトウェアスタック」と呼びます(図5参照)。

図5:ソフトウェアスタックの例(EWARMの例)

注意事項

 スタックに関して注意すべき点を以下に記載します。基本的には、スタックにコンテキストを保存したり、スタックからコンテキストを復帰する手順はマイコンによって異なります。各製品の仕様書を確認することが必要です。

  1. SPが示すアドレスは、最後にPUSHされたデータのRAMアドレスを示す場合と、次にPUSHされる場所を示す場合があります。(STM32F103の場合は後者。図6参照)
  2. PCは、中断した時点のアドレスを格納する場合と、中断したアドレスの次の命令のアドレスを格納する場合があります。
  3. アセンブルコードを使って、自分でスタックするプログラムを作った場合に、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の例)

連載バックナンバーはこちら

次の記事を読む

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.