スパイス  組み込み制御装置の受注製作

モニタプログラムを移植する
平成26年4月 9日

動作確認
 実際にモニタプログラムをROMに書き込んで、ターゲットプログラムを動作させてみます。
 最初に結論を書いておくと、最初から一発で上手く動いた訳ではありません。既存のモニタプログラムに今まで説明してきた内容の変更部分を移植しましたが、細部で変数のつじつまが合わなかったり、必要な変数の更新を忘れたりと何度かプログラムを変更しています。ここでの作業は毎回SuperAKI-80基板の電源を落としてROMを抜き差しするため、非常に時間がかかります。慎重の上にも慎重に行います。
 まずは通信用のハイパーターミナルの設定からです。通信仕様として8ビット長、1ストップビット、ノーパリティに設定します。次にデータ受信後にデータ処理を行うための処理時間を確保します。設定箇所は”ファイル”メニューから”プロパティ”を選択します。設定タブを選んでASCII設定ボタンを押すと下記のウインドウが表示されます。画面中央付近のディレイ(行)に数字を設定します。 当初は数msもあれば十分だろうと考えていましたが、実際にやってみると10msでは時間不足で20msに設定するとやっと正常にプログラムのロードが出来るようになりました。

次の二つの図がユーザープログラムのロード手順を示しています。最初にハイパーターミナルから”L<改行>”と入力します。画面上には、”Load Hex File”と表示されます。ここで”転送”メニューから”テキストファイルの送信”を選択します。ファイルの選択画面が表示されますのでウインドウの下側にある”ファイルの種類”を”全てのファイル”に変更します。ここでターゲットプログラム用のHEXファイルを選択します。

プログラムのロードが終了すると”Finish”と表示されます。次にロードしたプログラムを実行してみます。”g<改行>”と入力します。このとき実行開始アドレスを指定しなかったので、デフォルトの開始アドレスである0x8000番地からプログラムを実行します。結果は下図のように正しく”hello world”を表示した後、モニタプログラムに復帰しています。
 以上でプログラムをRAM上にロードし実行することが出来ました。実際にはユーザープログラム側で割り込み処理を使ってみるなど確認すべき項目は沢山あります。しかし、今後は今の「取り合えず」動作するモニタプログラムを使用してプログラムをデバッグできます。モニタプログラムに追加したい機能を個別にテストして動作の検証を終えてから追加すればいいので、今までとは比較にならない程スムーズに作業できるようになります。

   本プログラムの課題
 取り合えずの動作は確認できましたが、幾つか気になる点があります。時間をみて調べてみたい部分です。
・ 通信エラーが起きたら”error”と表示するようにしてあるのですが、実際には上手く表示されません。ダンマリになります。通信制御部のエラー検出方法が正しくない可能性があります。
・通信後のデータ処理時間は思いの外長い時間が必要です。8MHz動作のV40では2ms程度だったのに比べると非常に長い気がします。コンパイラの最適化を試してみたくなります。

 市販のモニタプログラムのようにメモリのダンプやソフトウェアブレークの追加のような機能を増やす方向での検討も可能ですが、個人的にはあまり興味が沸きません。デバッグ作業の大半はprinf関数による変数の表示で賄えます。
 モニタプログラムを使用してのデバッグでは、printf関数を多用します。しかし標準のprintf関数はsbrk関数やmalloc関数を実装しないと動作しません。このため自作のprintf関数が広く使われています。特にデータの出力先を変更できるxprintf関数は非常に強力です。逆にxprintf関数が無いとモニタプログラムのメリットは半減しますので、最後にxprintf関数について多少の説明をします。

 ページ先頭へ 前へ 次へ ページ末尾へ