MacでH8-3067マイコンのクロスコンパイラ環境を構築してLEDを点灯させる

マイコン
この記事は約7分で読めます。

少し前にlittleBitsのArduino Coding Kitを使ったハンズオンセミナーに参加してきたのですが、そのハンズオンでの楽しさと最近のIoTの盛り上がりに触発されたこともあって、随分前に購入して棚の奥で眠っていたH8-3067マイコンを引っ張り出し、来たるべくIoT時代に備えマイコンプログラミングに再挑戦してみたいと思います(ちなみに、以前はちょっと触っただけで終わってしまっていた)。

ちなみに、私の持っているマイコンは以下です。お値段はそこそこします。。このキットは、下記の本の題材としても扱われています。

株式会社北斗電子製 ルネサス エレクトロニクス H8/3067搭載 H8/3067スタータキット

なんだが基盤をそのまま触るのもあれかと思い、弁当箱のフタにビス止めして取り付けています。使わないときはフタを閉めてコンパクトに収納でき、さらに埃も防げて重宝しています。

IMG_3784

クロスコンパイル環境の構築

まず最初に、H8-3067マイコン上で動作するプログラムを開発する環境を構築します。「H8マイコンによる〜」本では、マイコンのスタータキット付属のCDに収録されている開発環境を使ってWindows上でのプログラム開発を行なうスタイルを想定したものになっていますが、私の所有しているマシンはMacなので今回はMac上で開発できる環境を構築したいと思います。参考にさせていただきました書籍は、参考リンクの12ステップ本です。コンパイラはgccを使います。

GCCのビルドに必要なライブラリ

gccをソースからビルドするにあたって、以下の依存ライブラリが必要になります。

Prerequisites for GCC - GNU Project
Prerequisites for GCC
  • GMP
    • https://gmplib.org
  • MPFR
    • http://www.mpfr.org
  • MPC
    • http://www.multiprecision.org/index.php?prog=mpc
  • isl

GCC他のビルド

今回は、$HOME/workspace/h8-3067/toolsというディレクトリにソフトウェアライブラリをインストールしていきます。

GMP

MPFR

MPC

binutils

gcc

コンパイル時のオプションは、以下のページを参考にさせていただきました。

https://gcc.gnu.org/install/configure.html

私の環境では、sspがenableだとエラーになったため上記では無効にしています。

h8write

マイコンボードのROMにプログラムを書き込むにあたっては、h8write.cというプログラムを公開してくださっている方がいらっしゃるので、そちらを利用させていただきました。

http://mes.osdn.jp/h8/writer-j.html

ビルドは簡単で単純に1ソースファイルをビルドするだけです。

h8writeの使用方法はhelpを見れば大体分かりますが、例えばH8-3067CPU向けには以下のようにして実行します。デバイスファイルには、USB-RS232C変換ケーブルをPCに接続した時に認識されるデバイスファイルを指定します。例えば、私の環境では/dev/cu.usbserial-FTDXVFRB になります。

簡単なサンプルを実行してみる

クロスコンパイル環境を整えたので、実際にプログラミングして何か動作させてみます。マイコンキットにはLEDが付いているので、今回はLEDを点灯させてみたいと思います。参考にさせていただいた情報は、参考リンク・書籍に掲載しています。

今回用意したファイルは以下になります。とかく最小限のプログラムでLEDを点灯させることが目標です。

compile-process

main.c

ファイル先頭に定義しているマクロは、I/Oポートのレジスタのアドレスを指定しています。このアドレスにアクセスすることでI/Oポートを制御することができるようになっています。ポート5、AのレジスタをそれぞれP5xx、PAxxとしています。端子PA2、PA3にLEDが接続されており、mainのループの中でスイッチの開閉によってレジスタの値を変更しています。

startup.s

スタックポインタだけ指定してmainにジャンプさせています。スタックポインタのアドレスは、モード7で動作させたメモリマップを参考に指定しています。

ld.x

ベクタ領域の先頭にstartルーチンを指定しています。ROM領域は0x00100番地から始まるので、セクション.textの開始アドレスを0x00100に指定しています。

mode07-memory-map

H8-3067製品ページのマニュアル参照

ルネサス エレクトロニクス株式会社 (Renesas Electronics Corporation) | Renesas ルネサス
A global leader in microcontrollers, analog, power and SoC products, Renesas delivers trusted embedded design innovation...

Makefile

省略。12ステップ本を参考。

いざ点灯・・・

イルミネーションスタート!!オォ点灯した!

IMG_3795

反対側のライトも・・・!?オォ、無事点灯!

IMG_3796

最後に

littleBitsのようなモジュールでArduino IDEで開発するのに比べるとハードルは高かったですが、リンカスクリプトやアセンブラ、メモリマップなどローレベルの仕組みを理解することができるので非常に勉強になると思います。最初は、わからないことだらけでしんどいですが、自分自身わからないなりに色々と調べながら手を動かしていく中で少しずつ理解できるようになってきたように思います。

引き続きここで立ち止まらず、12ステップ本やH8本を参考にH8マイコンで遊んでみたいと思います。

参考リンク・書籍

  • https://gcc.gnu.org/install/prerequisites.html
  • http://d.hatena.ne.jp/satfy/20101226/1293370919
  • https://gcc.gnu.org/install/configure.html
  • http://mes.osdn.jp/h8/writer-j.html
  • http://www.ertl.jp/~takayuki/readings/gnutoolkit.html
  • http://japan.renesas.com/products/mpumcu/h8/h8300h/h83067/Documentation.jsp
  • http://akita-nct.jp/yamamoto/comp/H8/C_linux/C_linux.php#led_sample
12ステップで作る組込みOS自作入門
坂井 弘亮
カットシステム
売り上げランキング: 22,354

コメント

タイトルとURLをコピーしました