2012年8月3日金曜日

組み込みシステム OS無しの開発 その2 割り込み1

組み込みシステムでは、割り込み処理の全てを自前でサポートする必要があります。


 割り込みには複数のレベルの割り込みがあります。

 また、それぞれ、割り込みを許可する許可しないという、

割り込みのマスクという事も出来ますが、
NMIという割り込みを止める事が出来ない最優先の割り込みもあります。


 割り込み処理の基本ということで、まずは単純な割り込みについての説明です

 1.外部より割り込み信号が発生
 2.CPUは該当する割り込みベクターへPC(プログラムカウンターを変更して処理を始める)
 3.アセンブラで記述してある割り込み処理の場合は各種レジスタを保存する
 4.必要な割り込みマスクを設定する
 5.最低限の必要な処理を行う
 6.レジスタの内容を割り込み前の状態に戻す
 7.必要なレジスタ関係のクリアを行い次の割り込みが正常に動作するように設定する
 8.割り込み処理から復帰する

 大まかには、このような流れになります。

 組み込み用のC言語で記述する場合には、レジスタの退避等の処理を自動で記述してくれるものもあります。

 この場合は一度アセンブラソースを確認して見てください、理解が深まると思います。

 また、割り込みが発生した時に割り込み処理ルーチンで全ての処理を実行することはお勧めできません。


 システムでは複数の割り込みを、受け付ける場合が多いので、
多重割り込みという状態が発生しますので、
 なるべく、短い処理を行って、フラグ的なものとして記憶しておいて、

メインの処理の中で処理を行うことが お勧めです。

 一つ前のエントリーで説明を行っていた valatile で指定してある変数を割り込み処理の中で読み書きすることになります。