H8マイコンのソフトウェア開発環境を整備しよう:イチから作って丸ごと学ぶ! H8マイコン道(7)(3/3 ページ)
今回から「C言語による制御プログラミング」をテーマにした新章に突入! まずはH8マイコンのプログラミング環境の構築から。
――いよいよH8マイコンのプログラムをGCCでコンパイルして実行します。健一君はすでにヘトヘトのようですが、晴子さんはノリノリです。さて、2人は無事に「H8Tiny-USB」を動かすことができるのでしょうか?
GCCによるクロス開発環境が構築できたので、実際にC言語プログラムをH8Tiny-USBで実行してみましょう。
連載第2回でも述べましたが、本連載では関連ファイルを“D:\develop\H8Tiny-USB”ディレクトリに置く約束でした。同じように、クロスGCCのプログラムは「h8300-gnu」ディレクトリに置くことにしましょう。図7のように「h8300-gnu」ディレクトリを作成して、ファイル「sw1.lzh」をその中に解凍してください。
準備ができたらコンパイルをはじめます。Cygwinで「sw1」ディレクトリに移動してください。
$ cd d: $ cd develop/H8Tiny-USB/h8300-gnu/sw1
C言語プログラムをコンパイルします。次のコマンドで「sw1.c」をコンパイルしてください。
$ h8300-elf-gcc -c -mh -mn sw1.c
H8マイコン用のGCCは、h8300-elf-gccになります。「-c」「-mh」「-mn」はコマンド・オプションです。「-c」はコンパイルのみ実行する。「-mh」は300H CPUのコードを生成する。「-mn」はノーマルモードの指定です。
コンパイルが無事に終了すると、図8のように「sw1.o」ファイルが新たに作られます。名前が.oで終わるファイルは、オブジェクト・ファイルで機械語プログラムが収まっています。
次にスタートアップ・ルーチンをアセンブルします。実はC言語プログラムは、それ単体では動きません。C言語プログラムが動作できるように実行環境を整え、main関数を呼び出すスタートアップ・ルーチンが必要なのです。
スタートアップ・ルーチンはアセンブリ言語で記述されています。次のコマンドで「crt0.s」をアセンブルしてください。
$ h8300-elf-gcc -c crt0.s
今度は、図9のように「crt0.o」ファイルが新たに作られます。
続いてリンクです。スタートアップ・ルーチンとC言語プログラムを結合して、1つの実行ファイルを作ります。それでは、次のコマンドで「crt0.o」と「sw1.o」をリンクしてください。
$ h8300-elf-gcc -o sw1 -T 3664.x -nostdlib crt0.o sw1.o
「-o」オプションで出力ファイルの名前を指定しています。これがないと出力ファイルは「a.out」になってしまいます。「-T」はリンカスクリプトの指定。「-nostdlib」は標準のスタートアップ・ルーチンや標準関数をリンクしない指定です。リンクが終了すると、図10のように「sw1」ファイルが作られます。
最後に、ライタ・ソフトを使ってプログラムをH8マイコン内蔵のフラッシュメモリに書き込むために、実行ファイルをヘキサファイルに変換します。次のコマンドを入力してください。
$ h8300-elf-copy -O srec sw1 sw1.mot
すると、「sw1.mot」ファイルが新たに作られるはずです。「-O」でファイル形式を指定し、「srec」はモトローラSフォーマットを意味します。
H8Tiny-USBでプログラムを実行しよう
C言語プログラムのコンパイルも終わり、ヘキサファイルも作ることができました。後は、ライタ・ソフトでH8マイコンにダウンロードするだけで、プログラムを実行できます。
まずは、ライタ・ソフトをインストールしましょう。
現在では、H8マイコン用のライタ・ソフトもいくつか選ぶことができます。秋月電子通商の開発CD-ROMにもありますし、ルネサス テクノロジからは「FDT(Flash Development Toolkit)」がダウンロードできます。今回はCygwinからコマンドで実行できる、「Open SH/H8 writer」を使います。
「Linuxによるマイコンプログラムのページ」にアクセスしてください。Open SH/H8 writerは、みついわゆきお氏が開発したライタ・ソフトです。ここでWindows実行ファイル「h8write.exe」をダウンロードしましょう。h8write.exeは、“c:\cygwin\usr\local\bin”に入れてください。
H8Tiny-USBに「AKI-H8/3664タイニーマイコン」をセットして、USBケーブルで接続します。このときH8Tiny-USBのスイッチはOFFにしておきます。
連載第5回で述べましたが、PCのデスクトップの「スタート」ボタンを押し、「マイ コンピュータ」を右クリックし、ショートカットメニューから「管理」を選びます。デバイスの一覧に「ポート(COMとLPT)」−「USB Serial Port(COMx)」があれば成功です。
それではH8/3664のフラッシュメモリに、プログラムを書き込みます。
AKI-H8/3664タイニーマイコンの2つのショート・ピンを差し込み、H8Tiny-USBのスイッチをONにします。
H8Tiny-USBのシリアル接続を「COM1」に設定して、Cygwinから次のコマンドを入力してください。すると画像1のようにプログラムが転送されます。
$ cd develop/H8Tiny-USB/h8300-gcc/sw1 $ h8write -3664 sw1.mot
続いてプログラムを実行します。
H8Tiny-USBのスイッチをOFFにし、AKI-H8/3664タイニーマイコンの2つのショート・ピンを抜きます。
ショート・ピンなしでH8Tiny-USBのスイッチをONにすると、プログラムが実行されます。7セグメントLEDに「0」が表示され、SW1を押すと表示が「1」に変わります。確認してみてください。
何とかうまくいったようね。健一君。
はい!!
これもすべて岡野さんのおかげです(すっかり満足)。
まったく調子がいいわね。
へへっ!
さて、健一君の相手も飽きてきたから、今日はそろそろ帰ろうかなー。
えー。そんなこといわずに、これから飲みにでも行きましょうよ!!
ダメよ! 健一君にはステキなプレゼント(宿題)を用意しておいたんだから。
次回までに終わらせておいてね。そうしたら一緒に飲みに行ってあげてもいいわ。
じゃ、バイバーイ!!
エッ……。
晴子さんからの宿題(1)
SW1を押したら「1」を、SW2を押したら「2」を、SW3を押したら「3」を7セグメントLEDに表示するプログラムを作ってね。ただし、スイッチが1つも押されていないときは「0」を表示すること!
さて次回は、「C言語による制御プログラミング」について解説します。マイコンは裸のコンピュータなので、C言語プログラミングといっても特別なテクニックを必要とします。また、今回のC言語プログラムの内容と晴子さんの宿題についても解説します。お楽しみに!(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.