AKI-H8を買うと似たような説明書が何枚も付いてきて意味わからなくなるので必要最低限の情報だけをメモ。
一応H8/3048F。一応cygwinで秋月のコンパイラ。つまりH8/3048F CPUボードとマザーボードと秋月Cコンパイラを買ってきてなぜかcygwin上のくせにgcc使えわずに秋月せいコンパイラでコンパイルする手順をまとめたもの。
![]() かわいらしいへいれつていこう | ||
9pinのRS232Cのはいせん | ||
9pin 2 (RXD) | → | 25pin 3 (RXD) |
9pin 3 (TXD) | → | 25pin 2 (TXD) |
9pin 5 (GND) | → | GND |
9pin 7 | → | 9pin 8 |
じっさいのしゃしん |
ページ末尾に買うものリストを書きました。
んじゃマザーボードをはんだづけしましょうか。説明書の図見ながら。気をつけるとこだけ書きます。ジャンパをつけるのを忘れないように。(←)の黄色い線たちです。これを忘れてて1ヶ月悩みました。あほだ。。。
H8/3048Fのときはスイッチング電源に電源電圧設定用の抵抗R38を付け替えましょう。デフォルトは3kΩがついてて19Vになってます。
10kΩを4つ並列でつけて2.5kΩにして大体16Vくらいにしてますが(→)。4にんあつまっててなんかかわいい。
9ピンのRS232C端子を使ってパソコンとつなぐ場合は説明書に書いてない結線が必要です。こんな感じ→
3048F CPUボードの方はピンヘッダをつけるだけです。ピンヘッダと基板コネクタは一回はんだつけするとまず取れないので気をつけたいです。対角線の2つだけとりあえずつけて、あと使うとこだけはんだつけ…。
あと3052Fのときはいろいろマザーボード改造したり、CPUボードのMDジャンパをつけたりする必要があります。できたら 電源OFF→書き込みON→電源ONにしてAKI-H8/3048FのCDの D:\MB\MBTEST.MOT をライタで転送後、電源OFF→書き込みOFF→電源ONでLCDにスイッチの状態やらなんやらが現れれば成功。あと、LCDがないときは AKI-H8/3052FのCDの D:\ASM\SAMPLE\TIMER.MOT ならタイマでLEDが点滅したりして動作確認できる。
はい。次はソフトウェアのインストール。
AKI-H8/3048FのCDの D:\ASM\*.EXE とCコンパイラのCDの D:\*.EXE をパスの通ったディレクトリ[BIN]にコピー。
あとCコンパイラのCDの D:\*.{C,H,LIB} をディレクトリ[LIB]にコピー。以上。
はい。流れ的にはC言語ソース書いてコンパイルして、必要に応じてアセンブラ言語書いてアセンブルして、転送形式MOTに変換して転送、という感じ。
適当なディレクトリ[project01]に入って基本的に書く必要があるのはベクタ定義のアセンブリ言語ソース (*.mar) とC言語ソースと、リンク処理の羅列であるリンカスクリプト (*.SUB) です。
まず、最低一つ、プログラムの格納位置とかC言語へのどの関数から実行を開始するかなど(*1)を指定するためのアセンブリ言語ソース (仮にstartup.mar) が必要です。
ここ(東京高専のページ)のしたあたりにある StartupBasic.src を参考に
こんなの(startup.mar)を用意します。
これをいったん[project01]に置けば、エントリポイントをint main(void){}意外にするとき以外は変更する必要はないです。
あと、リンカスクリプトはこんなのが必要です(linkscript.sub↓(*2))。あ、libraryの行は[LIB]内のc38hab.libのパスに書き換えてください。
うーん。C言語を書くときに気をつけることはなんだろう…。#include <3048F.h>くらいかな。int main(void){...くらいかな。
あと割り込み関数の前に
#programa (割り込み関数名) void 割り込み関数名(void){ ... }かな。あと割り込みベクタ定義テーブル inttable.mar あたりに割り込み関数名を書いておくと(*3)。
startup.mar | inttable.mar | linkscript.sub |
初めはいるとこの指定とか | 割り込み起きたときに入るところの指定とか | リンク用のスクリプト。 |
案外でかいので 別ファイル |
.CPU 300HA .IMPORT _showLEDMatrix .SECTION A,DATA,LOCATE=H'000000 .ORG H'000070 ;IMIA1 .DATA.L _showLEDMatrix ;handler .END |
library d:\h8\lib\c38hab.lib ROM (D,X) START P,C,D(100),X,B(0FEF10) EXIT |
最終的にモトローラS4フォーマットというファイル (MOTという拡張子のついたファイル) 1個に変換してライタで転送します。 それまでの経緯を図で表すとこんな感じ↓
この道のりが長い…。C言語ソースが複数あるときは別々にコンパイルしてOBJ複数つくってL38H.EXEでリンクさせるのが正しいやり方みたいですが extern 宣言しないとみれなかったり、リンクのときにややこしいので
私は c01.c から他のファイルは全部includeして、Cのコンパイルはc01.cだけにしたりしてだましだましやってます。
C言語ソースは CC38H.EXE というコンパイラでコンパイル。
CC38H.EXE -cpu=300ha -include=$(LIB) c01.cこれでコンパイルに成功すれば c01.OBJ ができます。 エラーメッセージは標準出力に出力されます。$(LIB)にはディレクトリ[LIB]のパスを書いておきます。
A38H.EXE startup.mar A38H.EXE asm02.marとか。これは簡単。startup.OBJとかasm02.marとかができます。
L38H.EXE startup,asm02,c01 -output=project01 -print=project01 -subcommand=linkscript.SUB引数にはOBJファイル全部をコンマ区切り、あとオプションです。 -outputと-printにはプロジェクト名みたいなのを入れると[プロジェクト名].ABSとか[プロジェクト名].MOTとかができていい感じです。 これでエラーなしで project01.ABS ができたらリンク成功。
C38H.EXE project01.ABSとして転送ファイルproject01.MOTができます。お疲れ様でした
cygwin用のMakefileの例をここにアップ。$(LIB)に[LIB]のパス、$(WRITER)にライタのパスを書けばOKです。 リンカとかエラーコードを返してくれないのでコンパイル/リンク時にいちいち*.logというファイルにエラーメッセージを書く仕様になっています。 make allで全コンパイル、 make writerでライタH8writerTurboの設定変更、 make installで転送までできて便利です。
あ、このMakefileとlinkscript.subを生成するperlスクリプトMakefile.perlもおいときます。 Makefile書くのめんどくさいんで。
せっていほうほう |
#!パールのパス(cygwin形式) #begin settings $PROJECT_NAME = "プロジェクト名(MOTファイルの名前)"; $LIB_WINDIR = "[LIB]のパス(windows形式、かつ\は2重にする)"; $WRITER_CYGWINPATH = "ライタのパス(cygwin形式)"; $LINKSCRIPT = "リンカスクリプト"; $ASM_EXT = "アセンブリ言語ソースの拡張子、ドットは省く"; $OPTIMIZE = 1だと最適化あり、0なら最適化なし; $CPU = "300ha"; @C_SRCS = ("C言語ソース1","C言語ソース2", "C言語ソース3(全部拡張子、ドットなし)"); @C_DEPENDS1 = ("C言語ソース1に依存するhとかcとかひとつめ.h", "2つめ.h", "あ、全部ドットあり、拡張子ありで.c"); @C_DEPENDS2 = ("C言語ソース2に依存するhとかcとかひとつめ.h", "2つめ.h"); @C_DEPENDS3 = ("C言語ソース3に依存するhとかcとかひとつめ.h", "なかったら()とかにしといて"); @ASM_SRCS = ("アセンブリ言語ソース1", "アセンブリ言語ソース1(全部拡張子、ドットなし)"); #end settings |
じゃあこの Makefile.perl を作る Makefile.perl.perl はってさすがそれはいr
あ、お疲れ様でした
コンパイル/書き込みに必要なものは「書込」、完成してさぁケースに組み込んで電池駆動、ってときに必要なものは「動作」に○をしています。あれば便利なものは△で。×は不要なものです。
名前 | 何ですかそれは | 入手 | 書込 | 動作 |
CPUボード![]() | 正式名称はAKI-H8/3048Fマイコンボード。3048Fのチップとその動作に必要な周辺回路の基板。でもこれだけでは書き込みはできません。書き込み用の12V電圧とかRS232C端子とか付いてないので。 | K-179 | ○ | ○ |
マザーボード![]() | 正式名称はAKI-H8専用マザーボード。CPUボードを載せて書き込みとかデバッグとかするためのもの。書き込み回路、RS232C端子、スイッチ、評価用にLED2つ、ボタンスイッチ4つ、8bitDIPスイッチ、LCDモジュールがついてます。配線を変えれば4052Fも使えるみたいです |
LCD付K-5 LCD, CPU付K-4 | ○ | × |
H8用アセンブラ(A38H.EXE)/リンカ(L38H.EXE)/コンバータ(C38H.EXE)の入ったCD | アセンブラソースをアセンブルしたりくっつけたり転送形式に変換したりするWindowsソフト。 | K-4とかに付属 | ○ | × |
ライタ(h8WriterTurbo) | motファイルを転送するWindowsソフト。3052Fセットに付属してたh8WriterTurboが一番使いやすかった。代替案は3048F付属のK-ZTATとか。これはフリーでいっぱいあります | ○ | × | |
H8用Cコンパイラの入ったCD | H8用のC言語コンパイラ。Windowsソフト。秋月のver1.0というものを使います。代替案としてはフリーでgcc、非フリーではRenesasのhew、ver2.0(トラ技付属?)など。コンパイラ変えると激しくコンパイル方法が変わりますが。 | K-179 | ○ | × |
電池スナップと電池![]() | 動作だけならたぶん9VでOK。あっさりうごきました。あ、電池スナップとは9Vの電池をつける銅線です。 | × | ○ | |
USB-RS232C変換ケーブル | USBとRS232Cを変換するケーブル。ノートパソコンでやろうとするとRS232Cコネクタがなかったりするのであると便利。動作時にノートとRS232Cでおはなしするならいるかも | M-720 | △ | △ |
基板コネクタとピンヘッダ![]() ![]() | 基板と基板を合体して2階建て構造にするのに便利。ばんばん使うので大量に購入。 | × | △ | |
LCDモジュール![]() | 写真の正式名称はSC1602BSLB。SC1602BS*Bはバックライトなし。16文字x2行。主にsprintfとかでデバッグ用に使ってます。ただ、LCDモジュールで変数監視するとすごく遅くなる…。 | P-38 | △ | △ |
スルーホール基板![]() | 両面にはんだがついているユニバーサル基板。普通の基板でもいいんですが、2階建てにするには両面はんだがある方が便利です。でも両面高い。。 | × | △ |
*1 startup.marを全部説明すると、リセット時のエントリポイントの設定、スタックポインタの設定、static宣言され初期された変数のROM(領域D)からRAM(領域X)へのコピー、static宣言されて初期化されていない変数のゼロ埋め、C言語エントリポイントmain()へのエントリ、関数E_INT(),D_INT()の実装、各種領域アドレスの設定。
*2 inttable.marの中身は IMIA1(割り込み1) のハンドラ(この場合LEDマトリクスを表示するためのshowLEDMatrix関数)の設定
*3 linkscriptの中身はライブラリにd:\h8\lib\c38hab.libを使って、領域Dを領域Xに関連付け、番地0x100(ROM)から 領域P,C,Dを配置して、ここからプログラムスタート、番地 0x0FEF10(RAM) から 領域 X,Bを配置。