特徴を活かしたメイン関数の効果

前回紹介した、最新マイコンの特徴を活かすメイン関数の効果を示します。

測定は、RL78/G13 Stickスタータキットの、低消費電力動作デモンストレーション用J3コネクタを使います。このコネクタは、通常動作、HALTSTOPSNOOZEの各モードでの消費電流を測るものです。このキットに、適当なプログラムを書き込んで、メイン関数内に低消費電力モードのHALTがある場合とない場合で、どの程度差があるかを実測しました。

測定条件

消費電流

メイン無限ループ内にHALT()がある時

1.95mA

HALT()無しの時

5.70mA
測定結果と測定方法
低消費電力モードの効果と測定方法

メイン関数の無限ループ内でHALTの時間割合が多ければ多い程、消費電流を下げることができるので、ここで示した値は、目安で、平均消費電流です。しかし、HALTがメイン無限ループ内にあるだけで、マイコン消費電力が半分以下になることが判ります。

最新マイコンの特徴を活かすmain関数とは?

最新マイコンには、20MHzを超える高速動作と消費電力を抑えた2つの動作モード、このモードを効率的に切り替える仕組みを持ちます。この特徴を活かすメイン関数をRL78/G13G14で示します

最新マイコンの特徴を活かすメイン関数

ポイントは、メイン関数の無限ループ内で、高速動作後、低消費電力モードへモード切替することです。低消費電力モードからの復帰は、タイマ割込みや外部割込みなどの割込み処理で行います。

図1 最新マイコンの特徴を活かすmain関数
図1 最新マイコンの特徴を活かすmain関数

 

低消費電力モード中は、電力消費が低下しますので、このモードの時間が長ければ長いほど、マイコントータルの消費電力は下がります。このため、最新マイコンには、高速動作モードと低消費電力モード、効率的なモード切換え機能の3つが備わっています。

高速動作モード

RL78/G13G14は、最大32MHz、世界定番のCortex-M0マイコンは、最大50MHzなど最新マイコンの動作速度は、簡単に入手できる20MHz発振器を大きく超えるものがほとんどです。また、動作電圧範囲も1.8Vから5.5Vまでと広範囲で、マイコン以外のデジタルデバイスとの接続トレランスは良好です。

但し、RL78マイコンは、供給電圧:VDDによりCPUの最大速度が異なるので、図2のコード生成時の動作モード設定には、注意が必要です。図3から、RL78/G13G14は、2.7(V)VDD5.5(V)範囲では、最大32MHzの高速メイン・モードで動作しますが、1.6(V)VDD1.8(V)時は、4MHz動作が最大となります。

どの動作モードに設定してもRL78マイコンは、高速処理で、かつ、高速処理中でも電力消費は低いことが判ります。

図2 コード生成の動作モード設定画面
図2 コード生成の動作モード設定画面

 

図3 RL78/G13,G14の動作電圧と動作電流
図3 RL78/G13,G14の動作電圧と動作電流 (ルネサスエレのRL78ファミリマイコン資料より抜粋)

低消費電力モード

最新マイコンには、通常動作と別に低消費電力モードが必ずあります。機種によりスリープやHALTなど、呼び名が異なりますが、いずれもCPUや一部の内臓周辺機能へのクロック供給を停止し、電流消費を低減させるモードです。

RL78/G13G14では、図4HALTに相当する低消費電力モードは、通常動作と組み合わせて使うことが重要です。つまり、一般的なメイン無限ループ内の処理を、図1に示したように、割込み起動の通常処理後は、ループを無駄に回さず、低消費電力へモードを切替えることで、本来の組込みマイコン高速処理が実現できるのです。

図4  RL78/G13、G14の動作モード
図4 RL78/G13、G14の動作モード(RL78ファミリマイコン資料より抜粋)

高速なモード切換え

RL78/G13G14には、割込みバンクが4面あることや、高速に関数を呼び出すcalltなどの仕組みがあり、割込み処理のオーバーヘッドを少なくすることができます。一方、Cortex-M0マイコンには、モード切換えを高速にする専用回路:NVIC (Nested Vectored Interrupt Controller)が実装されています。

RL78/G13G14実務向けスケルトンテンプレート

最新マイコン機能は上手く使わないと、実務向けプログラミングはできません。マニュアルには、これら機能の説明はあります。しかし、その背景にある使い方については、記述されていません。使い方は、ユーザマターだからです。背景理解度が低い者には、宝の持ち腐れになりかねません。

また、サンプルプログラムや、チュートリアルで紹介される処理は、内容理解に重点をおいた記述になっています。中級者以上ならば、これらをヒントにアレンジし、最新マイコンの宝を駆使したプログラミングができます。

今回はメイン関数のみを示しました。本ブログ読者対象である、初心~中級者向けに、近日中に、実務に使えるRL78/G13G14向けの実務向けスケルトンテンプレートをフリーウエアで公開する予定です。組込みソフトのフリーウエアはあまり見かけませんが、このテンプレートは、サンプルプログラムなどで掲載された関数を、手順に沿って簡単にテンプレートに組み込むことができるものです。ご期待ください。

新規プロジェクト作成の3方法

新規プロジェクトを作成するには、CubeSuite+のスタート(S)画面から、“新しいプロジェクトを作成”を使うのが一般的です。このツールには、新規プロジェクト作成と、既存プロジェクト流用の2つの選択肢があります。しかし、いずれの方法でも、コード生成の設定値は、引き継がれません。

新規プロジェクト作成時の2つの選択肢
新規プロジェクト作成時の2つの選択肢

そこで、既存プロジェクトを流用し、かつ、コード生成の設定値も引き継ぐプロジェクト作成方法を紹介します。

既存プロジェクトを丸ごとコピーし、そのフォルダ名とプロジェクト名:既存プロジェクト名.mtpjを、新プロジェクト名に変更します。変更したプロジェクト名.mtpjをダブルクリックし、CubeSuite+を起動します。これで、既存プロジェクトとコード生成設定値が、両方とも新しいプロジェクトへ引き継がれます。一旦、CubeSuite+を終了します。新プロジェクトフォルダ内にある旧プロジェクト名.PC名.mtudファイルは、削除して構いません。新プロジェクト名.PC名.mtudファイルは、自動生成されています。

プロジェクト作成の3方法 コード生成設定値コピー 既存プロジェクトファイルコピー
新規プロジェクト作成 なし:新規コード生成必要 なし:userdefine.h新規作成必要
既存プロジェクト流用 なし:新規コード生成必要 あり
フォルダ丸ごとコピー あり:コピー済み あり

 

但し、第3の方法でも、コード生成を再実行した場合は、割込みバンク設定値(RB1/RB2/RB3)は、全てデフォルトのRB0に戻ります。RB0以外の割込みバンク使用時は、注意が必要です。

スタータキットでRSKを作る費用は?

E1がセットになったRSKRL78/G13開発に理想的だが、日本仕様とUS/Euro仕様の価格差が気になる、という内容を以前書きました。開発環境には、RSKとは別に、RL78/G13 Stickスタータキットという低価格品(3000円~5000円程度)があります。今回は、このスタータキットでRSKと同じ機能を実現する費用を概算します。

スタータキットとRSKの機能差を示します。

機能 スタータキット RSK
CPU R5F100LEAFB R5F100LEAFB
CPUピンヘッダ あり あり
CPUリセットボタン なし あり
E1インタフェース あり(ボックスヘッダなし) あり(ボックスヘッダあり)
UARTインタフェース なし あり
LCDインタフェース なし あり
EZ Emulatorインタフェース あり(P12/TxD0P14/RxD0使用) なし
ユーザSW なし 3
LED ユーザ1個、電源1 ユーザ4個、電源1
ポテンショメータ 1個(ANI2 1個(ANI6

 

スタータキットは、SWLEDの個数を減らしていますが、E1インタフェースは実装済みで、しかも、RSKと同一CPUです。CPUリセットボタンは、デバッガー経由でリセットできるので、不要です。また、CPUピンヘッダで全CPUピンが使用できるので、RSK実装のSWLEDもスタータキットへ追加可能です。LCDインタフェースも、よく使われる4-bit LCDモジュールインタフェースですので、IOピン6本で追加可能です。

スタータキットのP12/TxD0P14/RxD0を使用するEZ Emulatorインタフェースは、E1インタフェースの代替です。従って、キットでE1使用時は、別用途に使えます。

結局、スタータキットに、E1単体価格15,000円を加えて20,000円弱、LCDSWUARTなどを実装する手間と費用が更にかかりますが、RSKより安く機能実現ができそうです。逆に、製造ミスや実装の手間を考えると、RSKはリーズナブル価格だ、とも言えます。

CubeSuite+のワン・ポイント・アドバイス集

CubeSuite+を起動すると、ワン・ポイント・アドバイスが表示されます。結構、有用な情報ですが、ランダムに表示されるメッセージは、起動時に落ち着いて読むのには、向いていません。また、表示を消すのは、もったいない気がします。そこで、全アドバイスをテキスト一覧にしました。

201299日現在、アドバイスは、全部で45個あります。内訳は、CubeSuite+関連が26個、デバッグ関連が3個、プログラム解析プラグイン関連が16個です。実体は、C:\Program Files (x86)\Renesas Electronics\CubeSuite+\AdviceContents\CubeSuite+\ja-JPフォルダ内のadvファイルで、HTML記述されています。英語版もありました。原本に興味がある方は、ココを参照してください。

HTMLタグなどを削除し、テキストファイルにまとめたCubeSuite+のワン・ポイント・アドバイス集を作成しました。一度目を通しておくと、起動時にアドバイス表示をしなくても安心です。

Renesas Starter Kit for RL78/G13の価格差

20128月、Renesas Starter Kit for RL78/G13RSK RL78/G13と略)が日本発売されました。USやヨーロッパでは、201111月には発売中でした。早速購入を検討中ですが、気になる点があるので、まとめます。

キット内容は、RL78/G13マイコンR5F100LEAFB (ROM:64KBRAM4KBFlash4KB)実装のボードと、LCDディスプレイ、E1エミュレータから成るハードと、統合開発環境:IDEです。日本仕様:R0K50100LS000BEは、IDECubeSuite+無償版、US/Euro仕様:YR0K50100LS000BEは、IDEとしてIAR’s Embedded Workbench機能制限版です。どちらも、E1以外にテクニカルサポートなしは、同一条件。

気になる点は、その価格差です。20129月現在、R0K50100LS000BEYR0K50100LS000BEもチップワンストップから購入可能ですが、R0K50100LS000BE29000円、YR0K50100LS000BE20900円です。同一ハード構成で、IDEが違うだけで、8100円もの価格差があります。

因みに、ボード実装マイコンは、CubeSuite+無償版で開発できますので、価格差が生じる理由が判りません。また、RL78/G14RSKも販売開始されましたが、こちらもUS/Euroではe2StudioというIDEが実装されていて、日本仕様のCubeSuite+とは異なります。

結局、RL78/G13G14IDEは、CubeSuite+IAR’s Workbenche2Studio3種類あることが判ります。IDEですので、それぞれに機能差があるとは考えにくく、動作環境(Windows/Mac/Unix)やライセンス等の差のハズです。ということは、価格が安いUS/Euro版のYR0K50100LS000BEを購入し、無償版CuteSuite+をインストしても問題なさそうです。

日本仕様RSK RL78G13(左)とUS/Euro仕様(右)
日本仕様RSK RL78G13(左)とUS/Euro仕様(右)※Runesasサイトから抜粋

ROM容量64KB以下のRL78/G13開発ボードとして、RSK RL78/G13は理想的ですが、外見から判断する限り同一ハードですので、US/Euro仕様のYR0K50100LS000BEを購入して別途CubeSuite+無償版をインストするか、初めから日本仕様のR0K50100LS000BEを購入するか検討中です。

 

RL78/G14 Stick スターターキット、RL78/G13 Stick スターターキットのバックアップ使用可能

RL78/G14 Stick スターターキット(G14キットと略)が手元に届きました。これは、先日のRL78/G14ワークショップ参加時に配布予定でしたが、製造が間に合わず、後日宅配となったものです。

RL78/G14RL78/G13がパッケージピンコンパチで、載せ替え可能なことは、既に掲載済みです。今回は、このG14キットと、RL78/G13 Stick スタータキット(G13キットと略)の関係を観ていきます。

RL78G14 Stick スタータキット
RL78G14 Stick スタータキット

コネクタ比較:G14キットとG13キットのコネクタ端子表を比べると、端子名は一部を除いて、一致しています。RL78/G14RL78/G13にプラスアルファの機能がありますので、その分が端子名の違いとして現れます。

RL78/G14キットとRL78/G13キットのコネクタ比較
RL78/G14キットとRL78/G13キットのコネクタ比較

メモリマップ比較:RL78/G14G13ともに、同一のROM64KB)、パッケージピン(64ピン)で比較すると、RAM5.5KB4KBの差がありますが、その他はフラッシュRAMも含めて同一メモリマップとなっています。

以上のことから、RL78/G14のプラスアルファ機能を使わなければ、G14キットは、G13キットのバックアップとして使えることが判ります。G14キットには、2個のタクトスイッチが追加実装されていますので、より効果的に開発できます。

CubeSuite+のコード生成が出力するファイル

CubeSuite+のコード生成(以下Cgと略)が自動生成するファイルを解説します。

先ず、使用マイコンを、なんでも良いので適当に選んで、新しいプロジェクトを作成すると、コード生成プレビュータグの画面が現れます。この時、プロジェクト・ツリーのクロック発生回路に“マーク”が付いています。最初に、このマークに対応します。

マークが付いた、クロック発生回路をダブルクリックして下さい。端子割り当て設定タブに、赤字表記で、“はじめに必ず設定してください。また、この設定は1度行うと変更ができません。”が現れます。PIOR00ビット=1などを選択すると、端子と機能が自動的に変わります。CubeSuite+のCgを使うには、この端子と機能を確定する必要があります

図01 クロック発生回路に!マークが付いた初期画面
図01 クロック発生回路に!マークが付いた初期画面

ここでは、適当にPIORのチェックボックスを選択して、“確定するボタン”を押し、その後、“コード生成(G)ボタン”を押します。すると、プロジェクト・ツリーのファイル+コード生成箇所に、自動的にいくつかのCファイルとヘッダーファイルが生成されます。生成ファイル名には、先頭に“r_”が付いたものと、“r_cg_”の付いた2種類があります。

この”r_”は、ルネサスを、“cg_”は、コード生成を意味し、ユーザが独自に作成するファイルと、Cgが作成したファイルを区別する役目を果たします。”cg_”の後は、マイコン内蔵の周辺名と、macrodriver.h/userdefine.hが続きます。

r_lk.drも生成されますが、別の機会に解説します。

図02 コード生成が生成したファイル
図02 コード生成が生成したファイル

まとめると、Cgは、以下の5種類のファイルを生成します。

01 CubeSuite+のコード生成が作るファイル種類

生成ファイル名 説明 補足
r_main.c main()を含む 内蔵周辺のAPIヘッダーファイルは、Cgが追加済み。
r_systeminit.c hwdinit()を含む 内蔵周辺のAPIヘッダーファイルは、Cgが追加済み。hdwinit()は、main()を起動。hdwinit()は、スタートアップ・ルーチンが起動。
r_cg_周辺.ch 内蔵周辺に応じてCg自動生成 周辺設定に応じてCgが生成したAPI関数を含むcファイルと、そのAPI関連のマクロ、プロトタイプ宣言を含むヘッダーファイル。周辺をユーザがどう使うかを記述するr_cg_周辺_user.cファイル(デフォルト中身は空)。
r_cg_macrodriver.h システム定義ファイル(#progma sfrなど) 全ファイルに自動追加
r_cg_userdefine.h ユーザ独自定義ファイル 全ファイルに自動追加(デフォルト中身は空)

 

ソースの起動順序は、スタートアップ・ルーチン→hdwinit()main()なので、もし、Cgを使わずに、全ソースをユーザが作る場合は、“r_”なしの、main.csysteminit.cファイルを最低限記述すれば良いことも判ります。

r_cg_macrodriver.hは、#progma sfr#progma NOPなどと、最低限の型を定義したファイルで、r_cg_userdefine.hは、ユーザが追加する型や、プロトタイプ宣言を記述するファイルでデフォルトは空です。どちらのファイルもCgが、全てのソースファイルに追加済みです。

このように、Cgを使うと、使用する内臓周辺に応じてファイルが分離されたプログラムの入れ物:スケルトンテンプレートを作ってくれます。後は、このテンプレートへ、周辺をどのように使うかをr_cg_周辺_user.cで追加したり、Cgが生成したAPI関数をどのように使うかをmain()などに記述したりすれば、プログラム完成です。

また、端子と機能を除く、周辺機能は、Cgで再設定ができます。Cgが生成したソースのコメント、/* Start user code for pragma. Do not edit comment generated here */と、/* End user code. Do not edit comment generated here */の間に、ユーザが追加したソースは、そのまま再設定後コード生成したソースへ上書きされるからです。詳しくは、414日の“CubeSuite+「コード生成」の使い方”を参照してください。

RL78/G14ワークショップに参加して

RL78/G14は、①G13とピン互換性あり、②動作速度はG13と同じ32MHz (Max.)、③G14 44DMIPS@32MHzG13 40DMIPS@32MHz、④Renesas Starter Kit販売が近いことが解りました。

RL78_G14とG13の差分ブロック図(ルネサス資料から抜粋)
RL78_G14とG13の差分ブロック図(ルネサス資料から抜粋)

CPUコアに乗除算命令と積和演算命令を追加し、高性能タイマやELCDTCなどの違いにより、G13よりソフト構成によっては、3割程度の性能向上が期待できるらしい。RAM容量も増えています。

ピンコンパチなので、G13からG14への置換えも可能なのでしょう。

CubeSuite+のアップデート機能

無料版CubeSuite+ V1.02.00  [12 Apr 2012]以降に追加された、アップデート機能は、これまでライセンス取得版、つまり有料版のみで提供されていました。開発ツールの更新は、基本的に6か月毎だそうです。しかし、CubeSuite+のように多くのツールの組合せで機能するIDEでは、各ツールの更新サイクルを合わせるのは無理です。結果として、23か月で一部ツール更新が発生します。

そんな時に役立つのが、このアップデート機能です。アップデートマネジャーを起動すると、ツール更新状況をチェックして、更新分のダウンロードとインストを行ってくれます。“アップデートの選択”は、CubeSuite+で開発できる全機種が設定されていますので、必要分のみを選択してください。インスト時は、一旦CubeSuite+を終了する場合もありますが、成功マークが表示されれば、最新ツールの組合せで開発ができます。

アップデートの選択画面ダウンロードとインストール画面アップデート成功画面