[Ubuntu Linux][H8/3048F] LinuxでH8/3048Fの開発を行う方法

環境

この記事の内容は、

で確認しました。

概要

この記事では、H8/3048FのプログラムをLinux上で開発する方法について、

  1. 開発環境の準備
  2. プログラムの作成

の2つにわけて、説明します。

開発環境の準備

手順

以下の手順で、開発環境を準備します。

  1. 必要なパッケージをインストールします。
  2. AKI-H8/3048開発キットから、ヘッダファイルをコピーします。
  3. ベストテクノロジーから、スタートファイルとリンカスクリプトパクリダウンロードします。
  4. Open H8 writerをインストールします。
パッケージのインストール
$ sudo aptitude

で、以下の2つのパッケージをインストールします。

  1. binutils-h8300-hms
  2. gcc-h8300-hms
ヘッダファイルのコピー

AKI-H8/3048開発キットから、ヘッダファイル3048.hをコピーします。

スタートファイルとリンカスクリプトのコピー

ベストテクノロジーBestTechnology download cornerから、「H8/300Hシリーズターゲットファイル」 (H8300HTARGET.zip) をダウンロードします。その中から、

  1. 3048F/h8crt0.s(スタートファイル)
  2. 3048F/h8rom.x(リンカスクリプト

をコピーします。

Open H8 writerのインストール

Open H8 writerから、h8write.cをダウンロードします。

以下のMakefileを記述します。

PKG = h8write
OBJ = $(PKG).o

$(PKG): $(OBJ)
    $(CC) -o $@ $<

.c.o:
    $(CC) -o $@ -O2 -c $<

clean:
    rm -f $(OBJ)

install:
    install $(PKG) /usr/local/bin

.PHONY: clean install
$ sudo make install

で、/usr/local/bin/h8writeにインストールします。

プログラムの作成

例えば、ポート1の出力を定期的に0と1にするプログラムmain.cを作成します。

#include "3048.h"

void wait()
{
  long t = 400000;
  while (t--);
}

int main(int argc, char* argv[])
{
  P1.DDR = 0xff;
  while (1) {
    P1.DR.BYTE = 0xff;
    wait();
    P1.DR.BYTE = 0x00;
    wait();
  }
}

これをコンパイルするときは、以下のMakefileのようにします。

PKG = main
OBJ = main.o h8crt0.o

TOOLS_PREFIX = /usr/h8300-hitachi-hms/bin/h8300-hitachi-hms-
CC = $(TOOLS_PREFIX)gcc
AS = $(TOOLS_PREFIX)as
OBJCOPY = $(TOOLS_PREFIX)objcopy

all: $(PKG).mot Makefile

$(PKG).mot: $(PKG)
        $(OBJCOPY) -O srec $< $@

$(PKG): $(OBJ)
        $(CC) -o $@ -T h8rom.x -nostartfiles -nostdlib $(OBJ)

.s.o:
        $(AS) -o $@ $<

.c.o:
        $(CC) -o $@ -c -mh -mint32 $<

clean:
        rm -f $(OBJ) $(PKG)

write:
        h8write -3048 $(PKG).mot /dev/ttyUSB0

.PHONY: clean all
$ make all

とすると、main.motが作成されます。

$ make write

とすると、main.motがH8/3048Fに転送されます。

注意

あちこちからファイルを取ってきていることにより、問題が発生するかもしれません。

ヘッダファイルも、開発キットからではなく、ベストテクノロジーが用意しているヘッダファイルを使った方がいいかもしれません。

スタートファイルとリンカスクリプトは、てっとり早くコピーしましたが、中身をよく理解して使う必要があります。