Blog Archives

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:;

続きを読む ›

Posted in 技術情報


MacでルネサスのRX631マイコンの開発〜GCC環境の環境ファイルの作成〜

こんにちわ、青木です。

個人的に進めていたプロジェクト「MacでRXマイコンの開発環境を構築する」が今回を含めてあと2回でこの連載が終わります。

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

環境設定ファイルxxx.ldを紹介するとビルドに必要なファイルは全て揃ったことになります。ビルドは、makefileと言われるスクリプトを作ると完成です。ビルトが終わると残りは、プログラムの転送になります。プログラムの転送は、次回紹介します。

環境設定ファイルは、GCC環境を構築した時に、prefix/rx-elf/lib/rx.ldが生成されています。これを修正してRX631の環境にします。左が、オリジナル、右がRX631用に修正したものです。

最初にMEMORY{ }の中身を修正します。オリジナルは一番大きいメモリサイズで記述されているので使い物になりません。RX631のハードウェアマニュアルのメモリマップをみてRAM、ROMの開始アドレスと終了アドレスを確認します。今回紹介しているRX631のRAMのサイズは64k、ROMのサイズは256kです。オリジナルには、STACKしかありませんが、修正後には、ユーザースタック(ustack)と割り込みスタック(istack)の2種類に分けています。CS+の環境がユーザーと割り込みに分かれていたので修正後の環境も分けています。スタックポインタは、スタックが増えるとアドレスがデクリメントの方向に進むので、指定するときは、最後のアドレスになります。それも、スタックが入ると設定したアドレスからその前のアドレスから開始されるのでISTACKは0x0000_FFFFではなく、0x0001_0000を指定しています。ISTACKは0x300byte使う予定なので、USTACKは0x0000_FD00を指定しています。USTACKは0x100byte使う予定なので、 RAMの最後は0x0000_FBFFとなり、RAMのサイズが0x0000_FC00となります。そのサイズをLENGTHに記述しています。
 ROMのサイズは、ROMの最後に固定ベクタが入るため、固定ベクタを除いたサイズを指定します。CS+を無償で使用するとコンパイルのサイズ制限(128kまで)がありますが、GCCの場合は、その制限がないため、マイコンにあるROMを全て使う事ができます。
 SECTIONS{ }にも、差分があります。KEEP(*(.init))、KEEP(*(.fini))はベクタ関連の記述です。ベクタは、CS+の環境をそのまま使えるように細工していますので、KEEP(*(.init))、KEEP(*(.fini))は使わないので削除しています。

そのほかに修正したのは、ベクタのところです。

オリジナルでは、ベクタの関数名をこのファイルで設定していますが、修正後は、別のファイルで設定しているため記述が異なっています。ベクタで注意するところは、固定ベクタ(.fvectors)は、0xFFFF_FFD0から開始されるので直接アドレスを記述していますが、可変ヘクタ(.rvectors)の方は、開始アドレスが決まっているわけではなく、ROM上に置くので、”>ROM”の指示でROM上のどこかにリンカーによって配置されています。配置されれば、vecttbl.cにある可変ベクタのRelocatable_Vectorsの配列のアドレスが決まり、そのアドレスが、スタートアップのstart.sでintbレジスタにセットされる仕組みになっています。
あと、stackのところもistackとustackに分けたので、記述も分けています。
makefileを紹介すると長くなりそうなので今回はここまでとします。

続きを読む ›

Posted in 技術情報


MacでルネサスのRX631マイコンの開発〜GCC環境でのベクタファイル〜

こんにちわ、青木です。

個人的に進めていたプロジェクト「MacでRXマイコンの開発環境を構築する」がもう少し続きます。

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

前回、GCC環境で用意するファイルを紹介しましたが、一部紹介しきれていないところがありましたので、今回は、紹介しきれなかったベクタファイル(vecttbl.cとvech.h)の修正内容を紹介します。環境設定ファイルxxx.ldは次回紹介します。

RX631のベクタは、固定ベクタと可変ベクタの2種類あります。固定ベクタは、アドレスが固定されており、変更することができません。例えばリセットのベクタアドレスは0xffff_fffcと固定されています。可変ベクタは、intbレジスタに可変ベクタの先頭アドレスを入れ、そのアドレスからベクタ番号を加算したアドレスに割り込み先のアドレスがある構造になっています。例えば、intbレジスタに0xffff_0000をセットとし、CMT0の割り込みベクタ28の場合は、0xffff_0000+28*4=0xffff_0070番地にあるアドレスにジャンプするというものです。
その辺りは、第3回の記事のルネサスのリンク先を見ていただけるとイメージがつかめると思います。
 ベクタの動作は、関数ポインタ配列と同じ動作をしているので、同じように関数名を用意して配列に入れれば、同じ動作ができます。固定ベクタは、次のように記述しています。

__attribute__(( ))はGCCの環境に用いられているもので関数属性というものです。__attribute__((.section(“name”)))はnameというセクション名のコードをビルド任せではなくユーザーが指定したメモリ空間に置くことができます。固定ベクタは、0xffff_ffd0から開始されるので、__attribute__((.section( )))を使って固定ベクタの関数は、ここに置いてねとリンカに知らせています。.section( )のアドレスの設定は、次回のxxx.ldで紹介します。
 ここでは、固定ベクタの配列名をFixed_Vectors[]としています。固定ベクタは、0xffff_ffd0から0xffff_fffcまで全てベクタが埋まっておらず、ベクタがないところは、Dummy関数を入れています。PowerOn_Reset_PCのベクタだけは、スタートアップファイルstart.s(詳細は第4回を参照)に”.global _PowerON_Reset_PC”の記述で外部で公開されているシンボルとして定義しています。PowerON_ResetがC言語の関数ではないので記述が少し違っています。
 コメントアウトしているのでおそらくお気づきだと思いますが、このファイルはCS+で生成されるvecttbl.cを修正して作っています。

次に可変ベクタですが、可変ベクタも同じように記述します。

ここでは、可変ベクタの配列名をRelocatable_Vectors[]としています。固定ベクタと同じように記述します。CS+のvecttbl.cには可変ベクトのテーブルの記述がないため、CS+で生成されるvect.hからコピーして作成しました。ベクタ番号が連番ではないところもあり、vect.hからコビーしたベクタ番号を消さずにコメントアウトして間違えにくいようにしています。

最後にvect.hは割り込み関数の羅列だけなのですが、ここでも__attribute__((interrupt))の関数属性を使ってこれらの関数は、「割り込みで使用します」と定義します。

割り込みの関数で高速割り込み(優先レベルを15)にした場合、割り込み前のところに戻る時に通常ではアセンブル言語でRTE命令で戻るところをRTFI命令で戻る必要があり、普通の関数とはちょっと違ったことをする必要があるので、関数属性を使う必要があります。

次回は、環境設定ファイルxxx.ldの紹介をします。

続きを読む ›

Posted in 技術情報


MacでルネサスのRX631マイコンの開発〜GCC環境で用意するファイル〜

こんにちわ、青木です。

まだまだ個人的に進めていたプロジェクト「MacでRXマイコンの開発環境を構築する」が続きます。

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

第5回目は、GCC環境に必要なファイルの紹介とGCC用にカスタマイズしないといけないファイルについて説明します。
ここで目指すMacでRX631環境の構築は、今までの資産を可能な限り流用し開発時間を短くすることです。つまり、今までCS+で開発してきたマイクロマウスのプログラムを可能な限り修正せずに流用することが大きな目標となります。

まずは、CS+の環境で新規のプロジェクトを作るときに生成されるファイルの確認をします。これ以外のファイルは、ユーザーが追加したファイルとなります。
生成させるファイルは、以下のものです。
 resetprg.c・・・初期設定ルーチン (リセットベクタ関数)
 dbsct.c・・・セクションの初期化処理(テーブル)
 stacksct.h・・・スタックサイズの設定
 intprg.c・・・ベクタ関数の定義
 sbrk.c・・・低水準インタフェースルーチン(sbrk関数)
 sbrk.h・・・低水準インタフェースルーチン(sbrk関数のヘッダ)
 main.c・・・main関数
 typedefine.h・・・型定義ヘッダ
 iodefine.h・・・内蔵周辺I/Oレジスタ定義
 vecttbl.c・・・固定ベクタテーブル
 vect.h・・・ベクタ関数のヘッダ

resetprg.cに関しては前回紹介したスタートアップのファイルです。そのほかのファイルは、そのまま使えそうな気がしますが、いろいろと落とし穴があります。

dbsct.c(セクションの初期化処理)は、GCC環境では環境設定ファイルに記述します。GNUtoolsのサンプルプログラムでは”Rx62t_led_flasher.ld”のxxx.ldファイルが環境設定ファイルになります。クロスコンパイラを作成したディレクトリにも同じようなrx.ldファイルがあります。このファイルの修正に関しては、後日紹介します。

stacksct.h(スタックサイズの設定)、割り込みスタックのサイズとユーザスタックのサイズが記述されています。GCC環境では、スタートアップのファイルで設定しています。実際の値はxxx.ldファイル内で記述しています。

intprg.c(ベクタ関数の定義)は、ほぼそのまま使えます。使えないところはコンパイラ指示の#pragmaです。#pragmaは、コンパイラに対して特殊なことをするように伝える役割をしています。#pragmaは環境依存であるため、コンパイラによって使えないことがあります。今回のGCC環境では、エラーとなってしまったので、コメントアウトしています。修正したものを下記に示します。左が修正前、右が修正後となります。修正後のファイルは、実際マイクロマウスで使用しているファイルなので余分なものもありますが・・・気にしないでください。#include machine.hでもエラーになり、ここでは使っていないのでコントアウトしています。

sbrk.c、sbrk.h(低水準インタフェースルーチン)ファイルは、sbrk関数を使わなければ不要なので、今回は、使用しない方針です。

typedefine.h(型定義ヘッダ)ファイルは、使っていないのでなんともいえませんが、そのまま使えると思います。

iodefine.h(内蔵周辺I/Oレジスタ定義)は、行数が多いですが、修正する内容は簡単です。ここでも#pragmaでエラーとなったため、コメントアウトしてGCCのエラーを回避しています。コメントアウトしてエラーは回避できるのですが、ただコメントアウトしてしまうとiodefine.hがそのまま使えないという問題がありました。その問題になったのは、#pragam bit_order leftのビットフィールドの順番でした。C言語は、アドレス管理をリンカがするので特にユーザーは気にせずにプログラミングすることができますが、レジスタに直接アクセスする場合、レジスタのアドレスとそのレジスタのビットの並びを気にする必要があります。レジスタのアドレスは、byte単位で管理されているため問題にならないのですが、ビットに関しては、ビルドによっては、ビットフィールドの並びが右からなのか左からなのか決まっていません。CS+は左詰、GCC環境は右詰となっており、すべて書き直しをしました。書き直した一部を以下に示します。unionの中にあるビットフィールドが上下逆になっているのがわかりますでしょうか。

vecttbl.c(固定ベクタテーブル)は、かなり手を加えています。

vect.h(ベクタ関数のヘッダ)も変更しています。

ベクタのところは、いろいろ変更しているので、次回修正した内容を説明します。

続きを読む ›

Posted in 技術情報


MacでルネサスのRX631マイコンの開発〜GCC用のスタートファイルを作成〜

こんにちわ、青木です。

毎週、更新し続けている個人的に進めていたプロジェクト「MacでRXマイコンの開発環境を構築する」も4回目となりました。

第1回目は、クロスコンパイラを作るためのコンパイラを作る方法を紹介しました。
第2回目は、RXマイコンのクロスコンパイラを作る方法を紹介しました。
第3回目は、CS+のMAIN関数が実行されるまでの流れを紹介しました。

第4回目は、第3回目で紹介したCS+のおまじない的な文法をGCC環境に合わせて記述し直します。
まずは、おさらいです。忘れていたら、第3回目の記事をみて下さい。
MAIN関数に行く前に、PowerOn_Reset関数が実行され、そのPowerOn_Reset関数では以下のことが実行されていましたね。

1行目は、関数ポインタ配列で実現しますと前回紹介しました。
そしてset_intbはアセンブリ言語でしか記述できないコードです。なんとなく予想をしていたと思いますが、今回紹介する内容は、アセンブリ言語です。といっても、難しいことはしておらず、ベクタ(intb)の設定、浮動小数点ステータスワード(fpsw)の設定、プロセッサステータスワード(psw)の設定、メモリの初期化をアセンブリ言語で記述するだけです。すべてをアセンブリ言語で記述するわけではないので安心してください。

さて、set_intbはアセンブリ言語では、以下のように記述します。

mvtcは、制御レジスタに値を転送するコマンドです。制御レジスタは、
 PC:プログラムカウンタ
 ISP:割り込みスタックポインタ
 USP:ユーザースタックポインタ
 INTB:割り込みテーブルレジスタ
 PSW:プロセッサステータスワード
 BPC:バックアップPC
 BPSW:バックアップPSW
 FINTV:高速割り込みベクタレジスタ
 FPSW:浮動小数点ステータスワード
の9種類です。お気づきの方もいると思いますが、set_intbのほかに、set_fpswとset_pswも同じように記述することができるということです。記述すると以下のようになります。

注意点として、RX631マイコンの動作モード(プロセッサモード)が2種類(ユーザーモードとスーパバイザモード)があり、
ユーザモードの場合は、mvtcコマンドでレジスタに転送できないものもあります。リセット直後はスーパバイザモードです。CS+のデフォルト環境では、スーパバイザモードのままなので、必要なければ、ユーザモードに移行する必要はないと思います。

割り込みテーブルレジスタintbの話に戻って、#_Relocatable_Vectorsの変数らしきものは、どこで設定しているのかというと、ほかのファイルで定義してます。そのため、「外部に変数があるよ」という記述をプログラムの初めに記述しています。
外部変数の参照は以下のように記述します。

この記述は、C言語に似ていますね。
Relocatable_Vectorsの所在や内容については次回紹介します。
残りの_INITSCT()は、メモリの初期化をしています。パワーオンリセット時、RAMの値は不定です。C言語ではbssセクションは、0で初期化する必要があります。初期値つき変数の初期化も必要です。ここでは、RAM全体を0で初期化しています。実装すると以下のコードになります。

参考したものは、以下のGNUtoolsのサンプルプログラム(start.S)になります。

mov命令は、ソースオペランド(src)にある値をデスティネーションオペランド(dest)に値を転送します。
ここでのsrcは、#0です。destはr1になります。
sub命令は、C言語的表現で記述すると dest = dest -src の引き算になります。つまり、r3 = r3 -r1 になります。
sstr.b命令は、r3で示される回数分、r2の内容(ここでは”0″)をr1で示される転送先番地へ、アドレス加算方向にr2の値がコピーされます。
言い換えると、r1のアドレスからr3のアドレスのまで、r2の値で埋め尽くすということです。
RX631のRAMのアドレスは、64Kbyteの場合、0x0000_0000から0x0000_FFFFです。
気になるのが、#__istackの存在だと思います。#__istackは、割り込みスタックポインタ(ISP)のアドレスを示しています。この変数も外部のファイルで定義しています。この他に、RX631はユーザースタックポインタ(USP)があります。スタックポインタは、スタックを管理するポインタで、スタックとは、割り込み要求が発生した場合、割り込みが発生する直前まで実行していたプログラムのフラグやフログラムカウンタを一時的に退避する場所です。詳細は、スタックポインタ、プッシュ、ポップのキーワードで調べてください。
__istackのアドレスは、0x0001_0000にしています。スタックポインタは、アドレスの減算方向に進むため、RAMの一番終わりの値にしています。このスタックポインタも設定する必要があります。

GNUtoolsのサンプルプログラムを参考に必要なところのみ抽出するとスタートアップファイルは以下のコードになります。

次回は、割り込みベクタのファイルの修正について紹介します。

続きを読む ›

Posted in 技術情報


MacでルネサスのRX631マイコンの開発〜CS+のMAIN関数が実行されるまでを理解しよう〜

おはようございます。青木です。
MacでルネサスのRX631マイコンの開発のブログが思っていた以上に見られていたので、朝から記事を書いていますw。

第1回目は、クロスコンパイラを作るためのコンパイラを作る方法を紹介しました。
第2回目は、RXマイコンのクロスコンパイラを作る方法を紹介しました。

第3回目は、C言語のMAIN関数までの道のりを説明しようと思います。
前回までで、アセンブリ言語での環境は整っています。
しかし、今の時代、CPUの処理が速くなったので特別な処理以外は、C言語で記述するのが普通になっています。
そこで、CS+の環境と同じような仕組みでC言語の開発環境を構築する方法を紹介します。

まずは、マイコンの動作とC言語の動作の違いを再確認します。
マイコンは、電源投入時(Power On Reset)またはリセットを行うとプログラムの先頭アドレスから開始します。RX631は0xFFFF_FFFCからベクタ(飛び先のアドレス)を取得してプログラムカウンタにセットして処理を開始します。
C言語は、MAIN関数から始まります。
変数に関しては、マイコンの場合、電源投入時のメモリの値は、不定値です。0かもしれないし、1かもしれない状態です。しかし、C言語は、変数を初期化しない場合、一般的には、0に初期化されています。
目に見えて違うのは、この2点だけですが、他にも、割り込みの設定など細かいことがあります。

では、CS+の動作を見てみましょう。
CS+では、MAIN関数に行く前に、resetprg.cのファイルを実行してからMAIN関数を実行しています。
resetprg.cでは、PowerOn_Reset_PC(void)関数が用意されており、そのなかで、

が実行されています。

上記で何をしているかは、ルネサスのwebにRXファミリ用コンパイラスタートアップの紹介の資料があり、これを一読すると上記の流れがなんとなくわかります。

1行目のset_intb関数ですが、CS+の組み込み関数として提供されています。他にもいろいろあるので、一度ルネサスのwebページの組込関数の一覧を見ておくと良いかもしれません。
set_intb関数では、可変ベクタテーブルの先頭アドレスを設定しています。詳しくは、ルネサスのwebで説明されていますので、そちらを見て下さい。
set_intbの引数の__sectop(“C$VECT)は、CS+のCC-RXビルド・ツールの共通オプション内のセクションの開始アドレスの変数です。

これには、いろいろとからくりがありまして、先ほどのルネサスの可変ベクタの説明のところで、ベクタ毎に番号が割り振られていると記載されています。そのベクタの番号がvect.hのファイル内で(vect==16)のようにベクタ番号を指示しているところがあります。

さすがに、これを、そのままGCC環境に使うことができないため、GCC環境では、少し工夫をしています。
C言語には、配列の中に関数のアドレスをいれてジャンプする機能(関数ポインタ配列)がありますね。この機能をつかって実現しています。詳しくは、次回紹介します。

2行目のset_fpsw関数もCS+の組み込み関数です。set_fpswは、浮動小数点ステータスワードレジスタの値を書き換える関数です。
FPSW_initの値は、オールゼロです。これを基準にいろいろと設定を追加していく形になっています。
_ROUNDは、浮動小数点の丸めの設定になります。初期値は近似値へ丸められます。CS+の浮動小数点の丸めの設定で0か近似の2種類が選択できるようになっています。CS+の初期値は近似になっているため、ここでは、_ROUNDの値は0(=近似)にします。
_DENOMは、浮動小数点定数に非正規化数を記述したときの扱いをどうするかの設定になります。CS+の浮動小数点定数に非正規化数の設定では、0として扱うか非正規化数として扱うの2種類が選択できるようになっています。CS+の初期値は、0として扱うになっているため、ここでは、_DENOMの値は0x00000100(=0として扱う)にします。

3行目の_INITSCT()関数は静的変数の初期化を行っています。これもCS+の組み込み関数です。

4行目のset_psw関数もCS+の組み込み関数です。set_pswは、プロセッサステータスワードレジスタの値を書き換える関数です。ここでは割り込み許可をしています。この割り込みを許可しいないとモジュールで割り込みを許可しても割り込みができない現象になります。つまり、割り込みイネーブルの親分ですね。

5行目でmain()関数をコールしています。

次回は、この内容をGCC環境に合わせた記述を紹介します。

続きを読む ›

Posted in 技術情報


MacでルネサスのRX631マイコンの開発〜クロスコンパイラの環境の構築〜

こんにちわ。青木です。
今回は、こんにちわの気分ですw。

個人的に進めていたプロジェクト「MacでRXマイコンの開発環境を構築する」の続編です。
前回のブログでクロスコンパイラの環境を構築するためのコンパイラ環境の流れを紹介しました。今回は、いよいよ、RXマイコンのクロスコンパイラをソースからコンパイルする方法を紹介します。

ルネサスエレクトロニクスの開発環境にe2Studioの紹介ページがあります。このページの真ん中あたりに対応コンパイラ一覧があり、その中にGNUが使えるとなっています。そのGNUツールはここから無償でダウンロードすることができると記載されています。その無償でダウンロードできるソースを使ってクロスコンパイラを作成します。

ダウンロードするには、ユーザー登録が必要です。
ユーザー登録が済むとメールでユーザー名とパスワードが送られてくるので、ログインしてソースをダウンロードします。
トップ画面にあるダウンロードのボタンをクリックするとwindows用の実行ファイルしかダウンロードできないため、上にあるメニューからソースコードをダウンロードします。ToolChainsの方をダウンロードしてもソースコードはないので、間違えないように。

ダウンロードページに行くと
・Source Code of GCC
・Source Code of Newlib
・Source Code of Binutils
・Source Code of GDB
の4つあります。最後のGDBは、デバッグの環境を構築するときに必要にデータで、今回のクロスコンパイラーの環境作成では、紹介しませんので、ダウンロードしなくても良いです。
試したバージョンは、GCC for Renesas v4.8.4.201703-GNURXです。このブログを書いているときはGCC for Renesas v4.8.4.201801-GNURXとバージョンが上がっていますが、一つ前との差分はここに書いてあり、大きなところは、RX64Mに対応したということぐらいです。

上3つをダウンロードしてGNU Toolsにあるビルド方法を参照しながら環境を構築していきます。

1.RXのツールチェーン用のディレクトリを作成します。ここでは、Downloads直下に作っています。

2.先ほどダウンロードしたソースコードをディレクトリsourceに移動または、コピーします。ここでは、コビーしています。
コピーしたら解凍します。

ここまで、順調にできていると思いますが、ここから、処理時間がかかるので、時間に余裕があるときに行うことをお勧めします。mac book airの性能で8h程度かかっています。

3.binutilsをインストールします。

RX-Toolchainv15.02/prefix/binにrx-elf-asがあり、致命的なエラーがないかきり問題なさそうです。
エラーで進まないようならroot権限が必要かもしれないのでsudo make installで試してみてください。
次にCコンパイラをビルドしますが、ビルドに先ほどインストールしたbinutilsが必要になるのでパスを通す必要があります。

パスを通したら一度ターミナルを開き直してパスが通っているか確認します。

4.GCCをインストールしますが、そのままでは、source/gcc-4.8.4/gcc/doc/gcc.texiの内容がMac portsのGCCと差分があり、gcc.texiでエラーになって先に進めません。ビルドする前にgcc.texiを以下のように修正します。変更点は、1行に記述するのではなく、改行します。

gcc.texiの修正が終わったらGCCのビルドをします。

致命的なエラーが出なければ、あとで、もう一度ビルドするのでここでは問題ないです。

5.Newlibのインストールをします。ここでも一箇所エラーで進まないところがあったので、修正しています。
source/newlib-2.2.0/newlib/libc/machine/rx/memcpy.sにある#errorコンパイル指示のところでエラーとなったので、コメントアウトしてエラーを回避しています。
コメントアウトしたので、memcpyの関数ライブラリは使わない方が良いと思います。
newlibは組み込みシステムで使用する標準Cライブラリです。必要なけば、newlibをビルドしなくても良いのですが、三角関数などを使いたいので、ここはどうしても回避してでもビルドしています。

6.最後にもう一度GCCのビルドをします。

これでクロスンパイラの環境構築が終了になります。次回は、CS+と同じ環境で使えるようにスタートアップなどのソースを作ります。

続きを読む ›

Posted in 技術情報


MacでルネサスのRX631マイコンの開発 〜GCCの構築のためのGCCの環境の構築〜

おはようございます?こんにちわ?こんばんわ?青木です。

個人的に進めていたプロジェクト「MacでRXマイコンの開発環境を構築する」の続編です。
前回ちらっと記載したのですが、Linux(ubuntu14.04)では、GNU Toolsのウェプサイトに構築方法があります。
Mac OS XはBSD系のUNIXをベースに開発されており、BSD系でのコンパイル可能なアプリケーションや開発Toolはほとんど利用可能のようです。
つまり、Mac OS Xなら、Linuxと同じ方法で環境ができる可能性があるということです。

環境を構築したマシンは、
・2012年モデル[MD232J/A] Mac book Air
・OS-X High Sierra(10.13)
です。2017年モデル 13-inch Mac book Pro(カスタム品)でも検証しています。

まず、はじめにすることは、RXマイコンのGCC(rx-elf-gcc)クロスコンパイラを作るためのGCCが必要になるということです。

OS-Xの初期段階では、GCCの呼び出しでllvmが起動するようで、llvmでは、GCCのクロスコンパイラをビルドすることができません。

そこで、macportsのGCCを使用します。macportsではなく、brewでもできるようですが、ここでは、macportsを使って環境を作ります。
macportsのほかに、X-Code(App Storeからダウンロード)のインストールとターミナルからxcode-select –installを実行します(ディスプレイによっては見えていない可能性があるので、念のため、installの前の-は二つあります)。

macportsはここからダウンロードしてインストールします。当時のバージョンは2.4.2-10.13-HighSierra.pkgでした。2018/6/8時点では、2.5.2-10.13-HighSierra.pkgでした。

インストールした後、macportsのアップグレードを行います。

アップデートが終わったら、GCCをインストールします。GCCのバージョンは5を使っています。バージョンによってコンパイルできても正常に動作しないことがあるようで、可能な限りバージョンを合わせた方が良さそうです。

GCCのインストールが終わったら、インストールしたGCCのライブラリと実行コマンドを移動、コピーまたはリンクにします。ファイル名を変更する必要があったので、私は、リンクにしています。

次回、クロスコンパイラのソースをダウンロードしますが、コンパイルに必要なライプラリgmp、mpfr、libmpcなどがないため、macportsから入手しています。

確認として、gcc–versionを実行してllvmでないことが確認できれば、クロスコンパイラーを作るコンパイラーの準備ができたことになります。

次回は、クロスコンパイラーのソースの入手とビルドについてです。

続きを読む ›

Posted in 技術情報


MacでルネサスのRX631マイコンの開発

お久しぶりです。青木です。

二足歩行の研修がなかなか進んでいない状況なのですが、昨年から、少しずつ進めていた個人的なプロジェクトがひと段落したので情報展開します。

個人的に進めていたプロジェクトが、「MacでRXマイコンの開発環境を構築する」です。

ご存知だと思いますが、ルネサスエレクトロニクスから販売されているRXマイコンの開発環境は、Windowsのみとなっています。GNUのコンパイラを使えば、Linuxで開発することは可能ですが、Macでの開発環境の構築方法は記載されていません。参考までにLinux(ubuntu14.04)での開発に環境の構築の方法は、ここにあります。

そもそも、なぜ、Macで、RXマイコンの開発するきっかけになったかというと、
・ひょんなことからMac Book Airを入手したこと。
・マイクロマウスのマイコンにRXを使用していること。
・他人と少し違ったことをしたかったこと。
という単純な理由で開発がスタートしたのです。

Macでルネサスマイコンを開発環境を構築したという情報がwebで見かけますが、開発したいターゲットがRX631であり、RX631で開発環境を構築したというwebページがなかったので、色々情報を組み合わせてRX631の開発環境を構築に挑みました。

いざ環境を構築すると色々と問題がでできたので、数回にわたりmacで開発環境の構築する情報を発信する予定です。

マイコン開発環境

続きを読む ›

Posted in 技術情報


マイクロマウス研修15 ~二作目のアートワーク~

こんにちは
まえけんです。

二作目のアートワークをしていきます。
前回は4層で一週間かかったアートワークでしたが
今回は2層で二日で引き終わりました。

研修ブログでは書いていませんが、
一作目のハーフマウスでは2層でアートワークしていた時は2,3週間かけても引ききれませんでした。

二作目では以下の点に注意してアートワークをしました。

  • 配線が大変な時、ピンアサインを変えながら引いたこと
  • 電源ラインを基板の外形に沿わすように配線した

その二つを意識しただけで劇的にアートワークが早くなり
スペース的な余裕も生まれ、見た目を気にすることもできるようになりました。

今回からは会社のロゴマークのうさぎマークも入るのでドキドキですが、
頑張って作っていきたいと思います!

続きを読む ›

Posted in ハーフマウスキット製作記, ブログ, 技術情報