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

モニタプログラムを移植する

平成26年4月 1日


プログラムのロード

 インテルHEXフォーマットの中身が分かったのでプログラムをRAM上に読み込むロードコマンドの実装を検討できます。一般的な組み込みプログラムでは、シリアル通信は割り込みを使って動作させるのですが、今回のモニタプログラムでは割り込みを使いません。これはデバッグ環境が貧弱な環境下でプログラムが複雑になるのを避けるためです。最初は「取り合えず」でも動作することを最優先します。

 基本的にはテキストの一行を読み込んで、その中からデータを保存するアドレスとデータ値を順番に読み出していきます。問題はデータの読み込み中はシリアル受信が連続しているため、あまり長い時間他の作業を出来ません。通信と平行して処理するなら通信速度を十分に遅くする必要があります。

 当初、XMODEMによるプロトコール通信を検討していたのも、通信中にデータ処理を行わなくても良いように通信とデータ処理を時間的に分離するためでした。XMODEMでは受信側がデータ要求することで通信が始まり特定の文字数を送信することで通信が一旦停止します。この停止時間中にデータ処理を行います。再びデータ要求を行うことで通信が再開します。これにより通信とデータ処理を時間的に分離できます。

 ハイパーターミナルおよびTeraTermのテキスト送信機能では送信はファイルの終わりに達するまで連続して行われますが、通信を一時停止させる処理を行うための設定項目があります。ハイパーターミナルを例にとると通信を切断した状態で、

    ファイルメニュー -> プロパティ画面

を呼び出し、設定タブに切り替えます。次に画面右下にあるASCII設定ボタンを押すと下記ウィンドウが開きます。画面中程にあるディレイ(行)に値を設定することで、一行送信おきにデータ処理時間を確保します。1か2を設定しておけば良いでしょう。(平成26年4月9日追記 実験した所もっと長い時間が必要でした。動作確認を参照してください。追記ここまで)



 これでロードコマンドはインテルHEX形式のデータを一行ずつ読み込んでデータ処理を行う時間を確保することが出来ます。なお、このプログラム部分はz80CPUには依存しないので、他のマイコン向けに作ったプログラムをそのまま流用します。新規に作成する必要があるのは、通信ポートに対する入出力関数とその初期化関数のみです。

 もしゼロからプログラムを作るなら、C言語の動作する環境(PC上でも何でも良いので)の中で、この部分だけを先にデバッグを終わらせます。私が最初に作ったときにはPIC上でPicKitをデバッガとして使用しながらプログラムしました。このように異なるCPU間で簡単にプログラムを移動できるのがC言語の強みです。



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