特殊電子回路株式会社

 

 

特電について

トップ ページ製品情報ブログ「JTAG日記」JTAG情報会社紹介

インデックス

 ボード図面

 クイックスタート

 主な仕様

 GCCの使い方

 ダウンロード

 RXduinoについて

 Webコンパイラ

 JTAG ICE

 注文情報

 ご注意

 

関数リファレンス

 特電HAL

 RXduino

 デバイスライブラリ

 

サンプルコード

 サンプルコード集

 

 

GCCとは

GCCというのは、GNUコンパイラコレクションのことで、CやC++などのコンパイラを含んだ開発環境です。

通常はCコンパイラのことを指します。

GCCはオープンソースのフリーソフトウェアであり、誰でも無料で使うことができます。

リンク時のサイズに制限はないので、128kBを超えるプログラムも生成することができます。

 

RX用のGCCはソースコードで配布されていますので、これを利用するには、GCCのコンパイラ自体をコンパイルして、実行ファイルをつくらなければなりません。これは非常に厄介な作業で、一回のコンパイルとビルドに4時間くらいを要します。また、少しでも設定オプションを間違えるとビルドに失敗してしまって最初からやり直しになり、数時間の作業がムダになります。

どんなにGCCのコンパイルの経験があって手順がしっかりとわかっている人でも、最低丸1日かかります。

 

当社の場合では、いろいろな設定を行い、満足に使用できるCとC++のコンパイラを3日ほどかけて生成しました。ライブラリ等も揃っているので、printf や mallocなども使えます。

そのようにビルドされてすぐに使えるようになったGCCを、こちらで配布しています。

無料です。どなたでもダウンロードできます。

 

RX用GCCのインストール

RX用の実行コードを生成するGCCはCygwin上で動作します。

CygwinというのはRed Hatが開発した、Microsoft Windows上で動作するUNIXライクな環境です。

 

GCCを使用する前に、最初にCygwinをインストールしてください。

そのためには、Red Hat社のページからCygwinの setup.exe をダウンロードして実行します。Cygwinのインストールはとても簡単で、特に説明するようなことはございません。ただし、Develの項目は必ずインストールするようにしてください。詳しいインストール方法を知りたい場合はネット上で探してください。

 

Cygwinがインストールできたら、上記のURLからダウンロードした tkdn-20110720-gcc.tar.bz2 を適当なディレクトリに移動し解凍します。コマンドは以下のとおりです。

     

    tar jxvf tkdn-20110720-gcc.tar.bz2

     

解凍が終わったら、それを/usr/loca/の配下に移動します。

 

     

    mv tkdn-20110720 /usr/local/

     

これでインストールは終わりです。

 

RX用GCCの使い方

パスの設定

RX用GCCを使うには、Cygwin起動後、最初にパスを通します。

     

    export PATH=/usr/local/tkdn-20110720/rx-elf/bin/:$PATH

     

exportというのは環境変数をセットするコマンドです。

Cygwinに詳しい方は、ログイン時に自動的に上記のコマンドが実行されるようにするとよいでしょう。

 

パスが通ったら、rx-elf-gcc -vと入力してみてください。

以下のようにバージョン情報が表示されれば成功です。

ソースファイルのコンパイル方法

Cのソースファイルをコンパイルするには、以下のようにします。

     

    rx-elf-gcc [オプション] -c ファイル名.c -o ファイル名.o

     

代表的なオプションには、

 -O2  最適化を行う

  -Wall いろいろな警告を出す

 -g    デバッグ情報を埋め込む

があります。

 

リンカの使い方

各種のファイルをコンパイルして、オブジェクトファイル(.oファイル)を作ったら、rx-elf-ldでリンクします。

     

    rx-elf-ld [オプション] オブジェクトファイル -T リンカスクリプト

    -L ライブラリパス -lライブラリファイル -nostartfiles

    -o 出力ファイル名.elf

     

です。

 

オプションには、mapファイルを生成する-Mapオプションや、リンカスクリプトを指定する-Tなどがあります。

 

-nostartfilesオプションと-Tオプションは必須です。これを指定しないと、デフォルトのスタートアップコード(newlibの中に入っているもの)が使われてしまい、デフォルトのメモリマップ(実際のデバイスのものとは異なる)に配置されてしまいます。

 

スタートアップコードというのは、CPUのスタックポインタや制御レジスタを設定して、main()を呼び出すためのコードです。リンカスクリプトとは、メモリ上のどこにプログラムやデータを配置するかが書かれたファイルです。

 

Cライブラリは/usr/local/tkdn-20110720/rx-elf/rx-elf/lib/のパスに、GCCのライブラリは/usr/local/tkdn-20110720/rx-elf/lib/gcc/rx-elf/4.6.1/にあります。もし、printfやmalloc、割り算や三角関数などのライブラリを使うのであれば、リンカのコマンドは以下のようになります。

     

    rx-elf-ld -Map testapp.map start.o main.o vecttbl.o intprg.o tkdn_sci.o lowlevel.o -T rx62n_ram_standalone.ld -L/usr/local/tkdn-20110720/rx-elf/rx-elf/lib/ -L/usr/local/tkdn-20110720/rx-elf/lib/gcc/rx-elf/4.6.1/ -lc -lgcc -lm -nostartfiles -o testapp.elf

     

 

-lc  cライブラリ。常に使う。

-lgcc gccライブラリを使う。もしリンク時にエラーが出るようならつける。

-lm   三角関数などの数学ライブラリを使う場合につけます。

 

このような長いコマンドを毎回打つのは大変なのでmakeファイルを作るとよいでしょう。

生成されたELFファイルは、JTAG ICEを用いてRX内のRAMにダウンロードできます。

 

HEXファイルの生成

プログラムをROM化したい場合は、rx-elf-objcopyコマンドを使ってELFファイルをMOTファイルに変換し、FDT等を使って内蔵ROMに書き込みます。そのコマンドは、

    rx-elf-objcopy --srec-forceS3 --srec-len 32 -O srec testapp.elf  testapp.mot

と入力します。

 

★旧バージョンのrx-elf-gccのバグについて

RX用のGCC(具体的にいうとリンカ)にはバグがあって、仮想アドレスとROM上のアドレスが一緒になってしまいます。したがって、--change-section-lma .data=0xffff0000のようにLMAを手動で指定して変更してやらないとグローバル変数の初期値が設定されないという問題が生じます。当社で配布している7月20日版のRX-ELF-GCCではこの問題をFIXしているので、このオプションをつける必要はありません。普通のGCCと同じように使えます。

 

難しいことを考えずにすぐに使えるRX用GCCのサンプルアプリ

スタートアップや、リンカスクリプト含んだ完全なプロジェクトの一式を下記のURLからダウンロードできます。

RX62N用GCCサンプルアプリ

割り込み駆動のシリアル通信用コードも含まれていますので、ぜひプロジェクトの雛形としてご活用ください。

上のアーカイブに含まれているファイルの内容を説明します。

    start.asm

    スタートアップコードです。スタックポインタの設定、PSW・BPSWの設定、.dataセクションのコピー、.bssセクションのクリアを行ってmainにジャンプします。

    intprg.c

    各種の割り込み処理ルーチンです。

    lowlevel.c

    printfやmallocを実行するために必要なサブルーチンです。

    main.c

    printfと三角関数を使ったサンプルアプリケーションです。

    tkdn_sci.c

    SCIを使うサンプルコードです。SCI0とSCI1に対応しています。iodefineを読み込まずに動作します。

    vecttbl.c

    例外ベクタと割り込みベクタの配列を実装しています。

    iodefine_renesas.h

    ルネサスHEWが生成したiodefine.hです。いずれ

    tkdn_sci.h

    SCIを使う場合にインクルードしてください。

    vect.h

    割り込み処理ルーチンのためのプロトタイプ宣言です。

    rx62n_ram_standalone.ld

    プログラムをRAM上に配置するためのリンカスクリプトです。

    rx62n_rom_standalone.ld

    プログラムをROM上に配置するためのリンカスクリプトです。

    makefile

    makeを実行するためのファイルです

・RAM上のアプリケーションとしてビルドするには、 make と入力します。

 elfファイルが生成されるのでJTAG ICE等を使ってダウンロードしてください。

・ROM上のアプリケーションとしてビルドするには、 make romと入力します。

 生成されたmotファイルはMITOUJTAGやFDTで書き込んでください。

・プロジェクトをクリーンアップするには、make cleanと入力してください。

・生成されたファイルを逆アセンブルしたリストを生成するには、make listと入力してください。

 

ぜひともGCCで、制限のないプログラムを開発してみてください。

 

なお、GCCでのコンパイルには、まだ何か問題がある可能性が排除できません。このGCCで開発したプログラムを製品に使用する場合は、お客様の責任の下、念入りな検証に基づいて行ってください。

 


Copyright(C) 2011 TokushuDenshiKairo Inc. All rights reserved.