ソフトウェア割り込み

組み込み屋さんなのでハードウェア割り込みの割り込みハンドラはおなじみだが、ソフトウェア割り込みのコードは書いたことが無かった。(汗

そもそもソフトウェア割り込みについては情報処理試験の試験勉強ぐらいで教科書レベルの薄い知識しかない。「ソフトウェア割り込みもハードウェア割り込みと同じようにベクタテーブルがあるの?」と聞かれて、答えられなかった。

ので。ググって見た。ソフトウェア割り込み - kzono Wiki*

ソフトウェア割り込みも割り込み要因とゆーか、例外ごとにベクタ領域をとられていることがわかった。

どう考えてもマイコンごとに違うはずなので、各種ハードウェアマニュアルをチェックした。

AVR AT Mega88
H8/3069R
SH2
V850
M32
RX

RX のマニュアルが一番例外についてわかりやすかった。
TRAP命令やバスエラー、0割の例外ごとにベクタがあり、そこに「ユーザが定義した例外ハンドラのアドレスを記入する」。

タイマ割り込みなどと同じ仕組み。

これは試してみなければ!

TRAP命令はC言語ソースコードではどう書くのか? インラインアセンブラ?
例外ハンドラの登録はリンカスクリプト

ページフォルトを発生させるのは難しいが、0割例外は簡単に起こせる。
零割例外ハンドラをリンカスクリプトで登録し、ハンドラが呼び出されたかどうか、
LEDをつけるとか、シリアルでhelloworldするとか。