(AVR編第2回)割り込み動作を実機に合わせる

2012/08/02

あなたは 人目のお客様です.

前回でとりあえずなんとなくKOZOSがAVRシミュレータで動作したのだが, これはほんとにとりあえずな実装で,いろいろシミュレータべったりな実装に なっているので実機では動作しない.

ということで実機(Arduino)での動作を考えて,少しずつ実機に合わせていってみよう. 今回はまずは割り込み動作.

前回の実装では割り込み処理はほんとにテキトーに書きやすいように書いたのだけど, 実機ではテキストのゼロ番地付近に割り込みハンドラ(ベクタでなく,ハンドラ形式) が4バイトずつ配置されているようだ.で,ここにジャンプ命令を置いておいて, 本来のハンドラにとばすという構成になっている.

従来は vector.c にベクタを配置してリンカスクリプトで先頭付近に配置, というようにしていたが,これを vector.s のようにしてジャンプ命令の 割り込みハンドラ集にして,やはりリンカスクリプトでテキストの先頭付近に 配置するようにする.修正したファイルはそれだけ.

さらに,gdb側にも修正が必要だ.GDBのAVRシミュレータは割り込み対応して いないので,前回その対応パッチを作ったが,実機と同じ動作に合わせるように 修正する.割り込み番号も見直して修正した.

で,以下が修正したコード.

gdbに対するパッチは,H8のほうは前回の改造から修正を累積していくようにして パッチ作成して配布している. 例えば H8移植編その2第15回で配布しているパッチは H8移植編その2第14回までの修正に対するパッチで, さらに H8移植編その2第14回で配布しているパッチは H8移植編その2第9回までの修正に対するパッチ, ってな感じなのだけどこれはパッチ当てやパッチ作成がとっっっても面倒で 後悔しているので,AVRはgdbのオリジナルに対するパッチをその都度配布する ようにする.(つまり他の回のパッチは必要無く,gdbオリジナルに対して いきなりパッチ当てしてしまえばよい)

あとは動かしかたは前回と同じ.まあ簡単な修正なので,やってみたら一発で動いた. readelfの出力も確認したが問題なさそう.


メールは kozos(アットマーク)kozos.jp まで