プログラムの作成




LEDの点灯
対象CPU:H8Tiny(H8/3664F)

とりあえず、H8の動作チェックと一連の書き込みの手順の学習のため、簡単プログラムを作成します。
こんなつまんないプログラムといわずにお付き合いください!(^_^)


ここで使うプログラムはこちらです。(H8Tinyでないと動作しません)


解凍すると、下記ファイルが現れます。

Makefile
h8-3664.x
3664.h
led.c
3664crt0.S
簡単にファイルについて説明します。
  1. メイクファイル(Makefile)

  2. makeが必要とするファイルです。通常はメイクファイル名を指定しないので、デフォルトのファイル名Makefileやmakefileを読み込んで実行します。
     
  3. スタートアップファイル (3664crt0.S)

  4. 通常C言語ではmain関数からプログラムが実行されますが、組み込み系のシステムでは、リセット直後にmain関数が動作するのではなく、CPUや周辺I/O、メモリなどの初期化を行ってからmain関数がcallされます。これらの処理がこのスタートアップファイルに記述されています。このファイルは通常、ハード周りの設定が多いのでアセンブラ言語で記述します。このファイルは特にハードの設計が変わらない限り、変更することはありません。
     
  5. C言語ヘッダファイル (3664.h)

  6. CPUの予約レジスタが定義されているファイルです。通常はいじりません。
  1. C言語ファイル (led.c)

  2. このファイルにあなたが行いたい処理を記述する訳ですが、組み込み系のシステムではパソコンのようにふんだんに資源がないので、独特のテクニックが要求されます。適当に作ってもそれなりに動作しますが、スピードやメモリの消費量は本業の人とはだいぶ違うものになるでしょう。
     
  3. リンカスクリプト (h8-3664.x)

  4. パソコンの場合、プログラムは通常ハードディスク上にあります。それを必要なときにメインメモリにロードしてCPUが実行という手順になりますが、組み込み系システムにはディスクがありません。プログラムはROMにあらかじめ書き込まれていて、リセットを同時にすぐさま実行を開始します。ROMは読み込みしかできませんので、変数やデータといった情報はRAMに一時的に記録されることになる訳です。パソコンと違ってプログラムもRAM、データもRAMではないので、あなたの作ったプログラムは始めの段階でROMに割り当てておかなければならないのか、RAMに割り当てておかなければならないか分別しておかなければなりません。それを記述するのがこのリンカスクリプトです。
とりあえずここではそれぞれのファイルの用途を理解していただいて、コンパイルしてみましょう。
% cd h8led
% make
makeが終わるとh8led, h8led.motという2つのファイルが出来上がります。h8ledがcoffフォーマットの実行ファイルです。coffフォーマットのファイルはgdbを使ってプログラムをデバッグする時などに利用します。ただ、このcoffファイルにはデバッグ情報やシンボル情報などを含んでいますので、直接H8マイコンに書き込むことができません。そのため、coffファイル(h8led)をmotファイルに変換する必要があります。今は何もせずにh8led.motが出来上がりましたが、実はmakeがその変換作業も行ってくれています。

さて、出来上がったファイルをH8マイコンに書き込んでみます。書き込み手順は
 

  1. H8マイコンボードを書き込みモード(ブートモード)にする。
  2. 電源を入れる。
  3. 書き込みソフトを実行する。
  4. 電源を切る
  5. H8マイコンボードを動作モードにする。
  6. 電源を入れるとプログラムが動き始める。
です。順序が違うと書き込みできませんので注意してください。上記手順の3.は次のようにします。
% 3664tool h8led.mot /dev/ttyS0   <- COM1の場合
いかがですか。1秒間隔でLEDが点滅しましたか?
 



LCDの動作
対象CPU:AKI-H8(H8/3048F, H8/3052F)

 秋月で売っている液晶モジュールに文字を表示するプログラムです。H8のマザーボード用に作成しました。

本当はprintfのストリームルーチンをちゃんと作る予定でしたが、時間がないので中途ハンパです。でも一応動きます。
H8/3048F用ですが、MakefileのCPUを3052にするとH8/3052Fでも動くようにしてあります。