GR-SAKURAのHEWプロジェクト

HEW+GCC+E1 >>>(デバッガの壁)>>> Cygwin+GCC >>>(ストレスの壁)>>> Webコンパイラ



CygwinとGCCを使ったGR-SAKURAのローカルビルド環境については、以前に書いた通りですが、E1を持っているならHEW+GCC+E1のほうがはるかに強力な開発環境です。RenesasRulzに、HEWを使用したローカルデバッグ環境(USBファーム付き)の記事があり、HEWのプロジェクトのテンプレートがアップされています。ここには自分なりのまとめを記します。

HEWとE1ドライバのインストール

当然ですが、まずHEWとE1デバッガが必要です。後述するプロジェクトテンプレートよりも古いバージョンのHEWを使っている場合は、アップデートが必要になります。

GNURXのインストール

コンパイラルネサスのRX用Cコンパイラではなく、KPIT社のGNURX(GCC)を用います。これにはユーザー登録が必要です。

プロジェクトテンプレートのダウンロード

GR-SAKURAライブラリ(RXduino+特電HAL)をふくむプロジェクトのテンプレートをダウンロードします。

ビルド

上記のプロジェクトを開くと、すぐにターゲットに接続しようとするので「キャンセル」します。好みの問題ですが、プロジェクトを開いてすぐにターゲットへの接続を求められるのはウザいと思います。そこで、[デバッグ]>[デバッグの設定]>[オプション]タブで「自動的にターゲットを接続しない」にチェックしておきます。
右上のデバッグセッションが「SessionRX_E1_E20_SYSTEM」になっていることを確認して、[ビルド] > [すべてをビルド]を実行します。
リンカが以下のようなエラーが出す場合があります。


There is a conflict merging the ELF header flags from ./gr_sketch.o
the input file's flags: 32-bit doubles, no dsp, no pid, RX ABI
the output file's flags: 32-bit doubles, no dsp, no pid, GCC ABI
failed to merge target specific data of file ./gr_sketch.o
この場合、リンカオプションに設定を追加してください。
[ビルド] > [KPIT GNURX[ELF] Toolchain] > [Link/Library]タブ > [Category]="Other"
[User defined options]に、--no-flag-mismatch-warnings を追記します。

デバッグ

[デバッグ] > [接続]を実行します。
[起動設定]ダイアログで、下記の項目を確認します。

[コンフィグレーションプロパティ]ダイアログで下記の項目を確認します。

  • [MCU]タブ: EXTAL周波数 = 12.0000 MHz
  • [MCU]タブ: 内蔵フラッシュメモリ書き換え時のクロック操作を許可
  • [内蔵フラッシュメモリの上書き]タブ: FFFF0000 - FFFFFFFF
    ( ※ USBマスストレージ領域を破壊しないための保護です。)

接続が成功したら、プロジェクトツリーのDownload modulesのSAKURA_Debug_HEW.xをダブルクリックします。すると、プログラムがターゲットにダウンロードされ、デバッグを開始できる状態になります。

SAKURAファームへの戻し方

SAKURAファーム(USBファーム)に戻すには、プロジェクトテンプレートで右上のデバッグセッションを「SAKURA_USBFW」に変更して、ターゲットに接続し、Download modulesのNonOS_MscFw.motをダブルクリックしてダウンロードします。

プロジェクトテンプレートの修正

ここまでで、開発環境のセットアップはできました。しかし、上記のプロジェクトテンプレートはGR-SAKURAライブラリ(RXduino+特電HAL)を抱き込んでいるのでプロジェクトツリーがたいへん見づらく、エレガントでありません。ライブラリはプロジェクトフォルダの外に出して、全てのプロジェクトで共有したほうが良いと思います。


※以下の内容はあくまで筆者の自己流のやり方です。

(1) ライブラリフォルダの作成

プロジェクトテンプレートのフォルダ(SAKURA_Debug_HEW_Full) と同じ階層に SAKURA_LIB フォルダを作成します。これがライブラリ用のフォルダとなります。
SAKURA_Debug_HEW_Full/SAKURA_Debug_HEW/ から、以下のフォルダを SAKURA_LIB/ に移動します。

  • gr_common
  • gr_sakura_eeprom
  • gr_sakura_ethernet
  • gr_sakura_liquidcrystal
  • gr_sakura_sdmmc
  • gr_sakura_servo
  • gr_sakura_spi
  • gr_sakura_stepper
  • gr_sakura_usbhost
  • gr_sakura_wire

(2) プロジェクトからライブラリを削除

HEWでプロジェクトを開きます。プロジェクトツリーから、gr_sketch.cpp以外をすべて削除します。
その後で、[プロジェクト] > [ファイルの追加]で、下記のファイルを追加します。

  • SAKURA_LIB/gr_common/intvect.c
  • SAKURA_LIB/gr_common/lowlevel.c

(3) インクルードディレクトリとライブラリディレクトリの設定

[ビルド] > [KPIT GNURX[ELF] Toolchain] > [C/C++]タブ > [Category]="Source"
[Show entries for] = "Include file directory"にて
$(PROJDIR)\から始まる項目を、$(WORKSPDIR)\..\SAKURA_LIB\ に変更します。


[ビルド] > [KPIT GNURX[ELF] Toolchain] > [Link/Library]タブ > [Category]="Input"
[Show entries for] = "C/C++ Library Location"にて
$(PROJDIR)\から始まる項目を、$(WORKSPDIR)\..\SAKURA_LIB\ に変更します。


だたし、HEWではパスの修正をおこなう機能が無い(追加と削除しかできない)ので、SAKURA_Debug_HEW_Full/SAKURA_Debug_HEW/SAKURA_Debug_HEW.hwp をテキストエディタで開いて、置換機能で書き換えます。(※かなりバッドノウハウです)

(4) ライブラリの文字コード変換

HEWはUTF-8に対応していないというイケてない仕様なので、ライブラリのソースファイルおよびヘッダファイルを開くと文字化けします。そこでこれらの文字コードUTF-8からシフトJISに変換しておきます。変換には 文字コード判定&変換ツール.NETなどのツールを用います。

(5) ビルド

ためしに[ビルド] > [すべてをビルド]を実行します。エラーなくビルドが通れば成功です。


修正したプロジェクトをアップしておきます。SAKURA_LIBフォルダに関しては、ライブラリの再配布がライセンス上許されないはずなのでアップは差し控えます。