新CコンパイラCC-RLは、処理スピード重視でRXやRHマイコンなどのコンパイラノウハウを応用した結果、従来のCA78K0Rコンパイラに比べ、
処理性能…………..3倍高速化
割込み応答性能…..6倍高速化
コードサイズ……..1割削減 → 低消費電力化
を実現しています。従って、今後RL78開発にCA78K0Rを使い続けるメリットは少なさそう です。弊社RL78/G1xテンプレートもCA78K0RプロジェクトからCC-RLを使ったプロジェクトへ移行を行います。
ルネサス提供資料
CA78K0RからCC-RLへの移行方法については、ルネサスから4月20日時点で4移行資料 が示されています(リンクページ一番下の4資料)。資料内容は、詳細ですが解りにくいので、弊社RL78/G1xテンプレート を例に、その移行手順やTipsなどを記載します。
移行方法の比較結果
移行方法は、2つあります。
1つが、新規にCS+でプロジェクトを作成し、これに、旧CA78K0Rで作成したソースを手動で移植する方法1。もう1つが、CS+の移行支援機能を使う方法2です。両者比較結果を示します。
CA78K0RからCC-RLへの移行方法比較
方法2が、コンパイラ表記混在でもビルト成功し、多くのルネサス既存サンプルソフトと、将来のCC-RLコンパイラサンプルソフトを活用、流用できることから優れています 。
移行方法具体例
2つの方法をRL78/G1xテンプレートへ適用した例とTipsを示します。
方法1:CA78K0R環境の手動移行
方法1で、CA78K0Rで作成したRL78/G1xテンプレート移行を行った例です。そのデメリットが明らかになります。
手順1:CC-RL環境のファイル構成
5月1日時点の、ルネサスFAQを「RL78 CC-RL」で検索しました。よくある質問に対して回答が示されるので、参考にします。
この中で、メモリ・モデルをスモール・モデルにすると、生成コードサイズが小さくなる ことが示されています。RL78/G1xテンプレートは、無償評価版CS+で動作するので、ROM≦64KBのスモール・モデルで適合します。そこで、新規プロジェクト作成後、CC-RLのコンパイル・オプションでスモール・モデルを選択します。
CC-RLコンパイラ・オプション設定
その他は全てデフォルトとし、コード生成(設計ツール)>クロック発生回路>端子割当て設定も、デフォルトのまま確定ボタンを押します。
これで、コード生成ツールが使えますので、コード生成(G)ボタンを押すと、プロジェクト・ツリーに緑囲いファイルが生成されます。これが、新コンパイラCC-RLネイティブの出力ファイルとファイル構成です。
この状態で、ビルドをすると、当然ですがエラーなしでビルド成功します。ここへ、CA78K0Rで作成したファイルを手動で移植し、エラーフリーの状態までもっていけばプロジェクト移行完了です。
手順2:コード生成設定
コード生成は、周辺回路をGUIで設定し、ソースコードと端子配置へその結果を出力します。しかし、逆のソースコードから周辺回路の設定を出力するツールはありません。仮に、このリバースツールがあれば、プロジェクト移行が簡単になるだけに残念です。
しかたありませんので、CS+ for CA,CXとCS+ for CCの両方を起動し、CS+ for CA, CXのRL78/G1xテンプレートのコード生成のパラメタを、CS+ for CC側へ手動で移設します。
※方法2の移行支援機能を使うと、コード生成パラメタが新しいプロジェクトへそのまま移植 されます。方法2のメリットです。
シンプルテンプレートのコード生成パラメタをCS+ for CCへ手動で移設し、コード生成(G)実行結果が下図です。CPUボードは、RL78/G14 Promotion Board(RL78G14-Stickとも言う)を使いました。
CC-RLコンパイラのコード生成結果
チャタリング対応済みのSW入力とLED出力を実装し、テンプレート動作理解と、ユーザ処理追加時のスタートプロジェクト提供を目的としたシンプルテンプレートは、WDTを停止させています。
※この他に、3種のCPUボード、RL78G13-Stick=RL78/G13 Promotion Board、QB-R5F100LE-TB、QB-R5F104LE-TBでRL78/G1xシンプルテンプレートは動作確認済みです。また、メニュードリブンテンプレートは、弊社推薦評価ボードBB-RL78G13_64で動作確認済みです。テンプレートですので、他ボードでもポート定義などの変更のみで動作します。
手順3:ソースファイル登録
シンプルテンプレートで必要となるソースファイルは、SW入力処理、LED出力処理、ユーザ追加マクロ、テンプレート本体main.cの4つです。「ユーザ追加」カテゴリを作成し、これらCA78K0Rのソースファイルをコピーした後、登録した結果が下図です。
CC-RLコンパイラのソースファイル登録
手順4:ソース修正
ビルド時、シンプルテンプレートでソース修正が必要となった内容とその箇所(一部抜粋)を示します。
内容
修正前(上:CA78K0R表記)と修正後(下:CC-RL表記)の実例(一部抜粋)
割込み関数宣言
#pragma interrupt INTTM02 r_tau0_channel2_interrupt RB3
#pragma interrupt r_tau0_channel2_interrupt(vect=INTTM02, bank=RB3)
sreg 使用宣言
sreg ubyte_t SwRedReg;
__saddr ubyte_t SwRedReg;
ポート定義
#define SW_SW1 P7.6
#define SW_SW1 P7_bit.no6
これら修正後、コンパイルエラー無しになりましたので、プロジェクト移設完了です。
手順5:セクション配置設定
CC-RLコンパイラのセクション自動配置を「いいえ」にする必要があります。
CC-RLコンパイラのセクション設定
手順6:RL78/G14 Promotion Board動作テスト
CC-RLでコンパイルしたソースを、RL78 EZ Emulatorへダウンロードする際に、下記エラーが発生します。
オンチップ・デバッグで使用する予約領域への書き込みはできません。
対策に、EZ Emulatorプロパティの上書きチェックを「いいえ」にします。
デバッグ・ツール予約領域の設定
これでRL78/G14 Promotion Boardにダウンロードでき、シンプルテンプレートの正常動作を確認しました。
以上が、方法1:新規プロジェクトを作成し、手動にてCA78K0R環境を移植した例です。
方法2:移行支援機能を使った移植
CS+の移行支援機能を使うと、手順2のコード生成設定と手順4のソース修正を省けます。また手順3のソースファイル登録もmain.cを除いて自動化できます。自動生成のmain.cは、内容なしのスケルトンファイルですので、CA78K0R側からmain.cを手動コピーして上書きが必要です。
方法2では、CC-RLを使っていても、ソースコードはCC-RL表記とCA78K0R表記の両方が使えます。
但し、今後CC-RLを使う時には、移行支援機能が設定したオプションを、毎回必ず設定する必要が生じます。この目的のため「現在のビルト・オプションをプロジェクトの標準に設定する(S)」があります。
ビルト・オプションのプロジェクト標準設定
ルネサス提供のRL/G1xサンプルコードも、今は全てCA78K0R表記です。今後追加されるサンプルコードがCC-RL表記になるとサンプル流用時に、コンパイラ表記の混在問題が生じます。この問題を回避するためにも、このビルド・オプションの設定は必要でしょう。
CA78K0RからCC-RL移行方法のまとめ
CA78K0Rコンパイラ環境から、CC-RLコンパイラ環境へ移行するには、CS+移行支援機能を使う方法2が良いことを示しました。この方法2をまとめると、以下になります。
CS+ for CCで、CA78K0R既存プロジェクトのファイルを流用(S)&構成ファイルをコピーして流用(O)でプロジェクト作成(作成時、メッセージ表示のコピー失敗ファイルは手動コピー必要)。
ビルド・ツールプロパティ>コンパイル・オプション>メモリ・モデルを「スモール・モデル」へ設定
ビルド・ツールプロパティ>リンク・オプション>セクション>セクション自動配置を「いいえ」へ設定
「現在のビルド・オプションをプロジェクトの標準に設定する(S)」を実行
ファイル>すべてを保存(L)で一旦CS+終了し、CS+を再起動
コード生成>コード生成(G)実行
CA78K0R環境のmain.cをCC-RL環境のmain.cへ上書きコピー
既存ファイルを追加(F)でコピーしたmain.cをソースファイル登録
使用するデバッグ・ツール選択後、ダウンロード・ファイル設定>予約領域の上書きチェックに「いいえ」を設定
ビルド&デバッグ・ツールへダウンロード(B)を実行し、デバッガと実ボードで正常動作を確認
※一旦CS+を終了するのは、無用なコード生成カテゴリの生成を防ぐ目的です。これをしないと、2つコード生成カテゴリが生じます。
CC-RL対応RL78/G1xテンプレートv4.0発売予定
販売中のRL78/G1xテンプレートv3.1は、CA78K0Rコンパイラ版です。方法2を使って新CC-RLコンパイラに対応したRL78/G1xテンプレートv4.0は、近日中に販売予定です。
テンプレートのご購入方法は、RL78G1xテンプレート購入方法 を参照してください。