![]() AKI-H8を組み込んだボード |
以下はその苦労のリスト
- プログラムが大きくなるとロードできない。
sprintf()とかをリンクするとプログラムが突然大きくなります。そうすると何故かロードができません。kermit等でいろいろ試して見たら、速度の問題でした。 増設メモリを3クロックサイクルにしているのが問題なのかもしれません。kermitでは、改行後にディレイを少しいれてやることで解決しました。 gdbでは、set hashとして、load時に#を表示させることで、若干ディレイが入るようでうまくいきました。 - sprintf()がうまく動かない。
LCDに表示させる文字列を作るのにsprintf関数を使用していたのですが、うまくうごきません。gdbで動作を追いかけて見ると 引数がわたっていないようです。 で、ふとプロトタイプ宣言していないことに気が付き、#include <stdio.h>を追加してやったら動くようになりました。
H8用のgccでは、関数の引数の1番目と2番目がレジスタ渡し(ER0とER1を使用)になっており、プロトタイプ宣言無しではsprintf()等の可変個引数を持つ関数をうまく呼び出せないようです。
いやー、もうライブラリーが悪いんだか、ハードが悪いんだかわからなくて大変でした。 最後は Cのプログラムと関数毎に逆アサンブルを見比べて調べていました。なんか懐かしいというか新鮮でした。ちなみに、逆アセンブルは objdumpの -D/-dオプションや、gdbのdisassコマンド,x/iコマンドなどでできます。H8を逆アセンブルしたコードは案外読みやすいです。 ^_^;
このへんの話もまとめなければ...
