AKI-H8のクロス開発環境

基板は2枚組です。
AKI-H8を組み込んだボード

最近、自宅では AKI-H8のクロス開発環境と格闘しています。Linux上のgccでクロスコンパイルしたコードを、gdbでリモートデバッグするという夢のような環境ですが、いろいろ苦労しています。

以下はその苦労のリスト

  • プログラムが大きくなるとロードできない。

    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を逆アセンブルしたコードは案外読みやすいです。 ^_^;

このへんの話もまとめなければ…

Leave a Reply

メールアドレスが公開されることはありません。