MacでルネサスのRX631マイコンの開発〜ビルドと転送〜


こんにちわ、青木です。

個人的に進めていたプロジェクト「MacでRXマイコンの開発環境を構築する」がこれで最終回となります。長かったような短かったような・・・

過去の記事は、以下からアクセスできます。
第1回:クロスコンパイラを作るためのコンパイラを作る方法
第2回:RXマイコンのクロスコンパイラを作る方法
第3回:CS+のMAIN関数が実行されるまでの流れ
第4回:GCC環境のスタートアップファイルの作成
第5回:GCC環境で用意するファイルの作成
第6回:GCC環境のベクタファィルの作成
第7回:GCC環境の環境ファイルの作成

前回までで、最低限必要なファイルを作りました、今回は、そのファイルをビルドして、マイコンにプログラムを書き込みをするところまで紹介します。これができれば、開発環境の構築が終了となります。
まず、ビルドですが、CS+の環境だとメニューバーからビルドをクリックするとxxx.motファイルまで作ってくれます。GCC環境では、そんな便利なものはなので、ユーザーがそれと同じ環境を構築する必要があります。
makefileを使わなくともバッチファイルのようなものでもビルド環境は作れますが、ビルドはmakefileの方が効率が良いためここでは、makefileを用いてビルドします。

ビルド環境は、makefileだけなので、サンプルを提示して終わりではつまらないので、ここでは、makefileの基本構造を説明してサンプルのmakefileが何をしているのかわかるようにしたいと思います。

 makefileのフォーマットは、基本は以下のものです。

   作りたいファイル : 入力するファイル
   —–TAB—— 作り方

例として
rx-elf-gcc -c main.c
rx-elf-gcc -c intprg.c
rx-elf-gcc main.o intprg.o -o sample
のようなコンパイルをする場合、makefileに変換すると
sample : main.o intprg.o
      rx-elf-gcc main.o intprg.o -o sample
main.o : main.c
      rx-elf-gcc -c main.c
intprg.o : intprg.c
      rx-elf-gcc -c intprg.c
となります。
makeを実行すると、上から実行されますが、はじめは、sampleに必要な入力ファイルmain.oやintprg.oがないため、次の作りたいファイルmain.oが実行されます。そのあと、入力ファイルintprg.oがないため、作りたいファイルintprg.oが実行されます。main.oとintprg.oができたらsampleが実行される仕組みになっています。main.oやintprg.oがあったとしても、main.cやintprg.cの日付がmain.oやintprg.oより新しい場合、作りたいファイルmain.oやintprg.oが実行されます。つまり、更新があったファイルだけコンパイルして最後にまとめてくれるのでコンパイルのシステムとしては、バッチファイルではなくmakefileが使われることが多いです。

基本構造から外れて、作り方がないものや入力ファイルがない記述もできます。
作り方がないものに関しては、
all: sample
sample : main.o intprg.o
     rx-elf-gcc main.o intprg.o -o sample
という記述ができます。これは、makeの性質を使用したもので、makeを単独で実行した場合、最初にある作りたいファイルが実行されます。このルールを使うには最初に書く必要があります。

もう1つの入力ファイルがないもの関しては、
clean:; rm -f *.o
という記述ができます。make cleanと実行すると入力ファイルが指定されていないので作り方のrmが実行されます。

 ビルドをするには、第2回で生成したクロスコンパイラを使います。試しにCMTのタイマーを使ってLチカのプログラムをビルドしてみます。プログラムは、以下のものを使用します。CMTの割り込みは1kHzの設定です。これを見るとCS+と同じ書き方なので、プログラムの移植が簡単にできることがわかると思います。

makefileはこれを使います。先ほど説明したことと照らし合わせると何をしているのかがわかると思います。

実行コマンドは、 makeだけです。データをクリアしたい場合は、make clearとコマンドを叩くとコンパイルの中間データや.motなどが消えます。

最後にプログラムの転送ですが、rxprogを流用しました。MITライセンスでしたので、ありがたく使わせていただきました。プログラムの転送はUARTのみです。USBで転送を期待していた方、ごめんなさい。
流用したプログラムには、RX631用はないので、通信コマンドが同じRX63TをコピーしてRX631用に書き換えます。と言っても、多くは、RX63Tの文字をRX631に書き換えるだけです。そのほかに、チェックサムのところでエラーになったので、修正しています。変更箇所は、ヘッダにもチェックサムを適用しています。適用した関数がsum2としています。

それ以外は、こちらの書き込みツールの準備のところを参考に修正をします。
修正が終わったらmakeを実行してrx_progを生成するのですが、流用したプログラムにはboostライブラリが使われており、ダウンロードする必要があります。boostライブラリは、ここからダウンロードし、解凍したらboostのフォルダーごと/usr/local/includeにコピーまたは移動します。boostライブラリの準備ができたら makeを実行してrx_prog生成します。
rx_progの生成に成功したら./profileのrx_progのパスを通してください。クロスコンパイラの生成の時にもパスを通すことをしているのでわからなかったらここを見てください。

プログラムの転送方法は、
rx_prog –progress –port=/dev/tty.usbserial-DM00AWBE –speed=115200 –device=RX631 –write sample.mot
で書き込めます。
通信ポートのtty.usbserial-DM00AWBEはマシンの環境などによって違いますので、各個人で確認して適用してください。

長い道のりでしたが、MacでもRXマイコンの開発ができるようになりました。この環境で、不自由なところが出れば、続報を書きたいと思います。
それでは、マイクロマウスの大会で会いましょう!!


Posted in 技術情報