サンプルソフトの構造

LPC8xxテンプレート開発時に参考にするサンプルソフトの構造について説明します。

サンプルソフトの構造
サンプルソフトの構造

RL78/G1xの無償IDEは、CubeSuite+、GUIで周辺回路のパラメタを設定すると、使用分の周辺回路APIが生成される優れものです。詳しくは、コチラの記事などを参照してください。一方、LPC8xxの無償IDEが、EclipseベースのLPCXpressoです。パソコンへのインストとアクティベーションなどは、トラ技2014年2月号やLPCXpressoサイトを参照してください。LPCXpressoもCubeSuite+と同様、サンプルソフトがIDEに付属しています。

スタートアップ処理とユーザプロジェクト処理

LPCXpressoをインストし、付属サンプルNXP_LPC8xx_SampleCodeBundle.zipをIDEへ展開後、そのソースを読む際のポイントは、サンプルソフトの構造です。構造の解説文が少ない(見あたらない)ので、説明を加えます(付属LPCXpresso User GuideはIDEの使い方解説書です)。

Blinkyを例に示します。組込みソフトは、2つの処理から成ります。「スタートアップ処理」と「ユーザプロジェクト処理」です。スタートアップ処理は、電源ONで自動的に実行されるResetISR()で、メモリなどの初期設定を行います。次にSystemInit()で、動作クロックなどのシステム関連の設定を行います。その後、ユーザプロジェクト最初の関数main()をコールします。

ユーザプロジェクト処理は、無限ループの前に2関数をコールします。HdwInit()で、使用する周辺回路の初期設定を行い、UserInit()でその他の初期設定を行った後に無限ループします(HdwInit()とUserInit()は、説明の都合上作成した関数名です)。

各関数は、NXP社提供のLPC8xxライブラリと、ARM社提供のCortex-M0+コアライブラリを使っています。またユーザが作成する関数も、これらライブラリを使って作成します。つまり、これらのライブラリがAPIを提供しているのです。ライブラリで初めから全てのAPIを提供しているところが、CubeSuite+と違う箇所です。

スタートアップ処理は、全てのサンプルプロジェクトでほぼ共通ですが、ユーザプロジェクト処理は、サンプルにより使う周辺回路が違いますので異なります。普通は、1個のサンプルプロジェクトで、1種類の周辺処理を紹介しますので、無限ループは文字通り簡単な無限ループで終わるものが殆どです。

スタートアップ処理の要は、最低限の動作ができる環境を作成するのが目的で、ブートストラップと呼ばれるゆえんです。パソコンのBIOSに相当する部分と言えば解り易いでしょうか? IDEのデバッガ動作時には、この部分は飛ばしてメイン関数の入口からデバッグを開始します。つまり、本来は、必要性が無い限り、変更不要と考えても良いでしょう。

ユーザプロジェクト処理も、無限ループ前を「周辺回路の初期設定:HdwInit()」と「その他のユーザ初期設定:UserInit()」に分けて考えると、参考にする部分がより明確になります。HdwInit()は、周辺回路の使い方が同じならそのままコピー利用もできます。但し、CubeSuite+と違って、LPCXpressoの場合はAPIパラメタで回路動作が変わるので、APIソースを解読する必要もあります。

サイズが大きいプログラムも、結局は無限ループ部分が大きいだけで、構造は同じです。大きな無限ループ部分の流用性や可読性を上げるために、ファイル分割などの技術を使っているだけです。

テンプレート工夫箇所

この構造が理解できると、サンプルプロジェクトの見通しが良くなります。そして、せっかく提供されているサンプルを上手く利用し、複数処理を実行するには、「無限ループ箇所を工夫すれば良さそうだ」、ということも判ります。組込み用のリアルタイムOSなども、この工夫の結果できたものと理解しても良いでしょう。但し、リアルタイムOS利用時は、OSの理解や面倒なオーバーヘッドも生じます。販売中のRL78/G1xテンプレートやLPC8xxテンプレート(近日発売予定)は、もっと手軽に複数処理を実現するものです。

世界定番マイコンと日本産マイコン

ハード単体の制御に比べ、ソフトで柔軟に処理変更ができるマイコンは、優れた制御手段です。柔軟であるがゆえに、デバッグなどがリスクになることもあります。

所望の制御ができれば、どのマイコンでも構わないハズですが、実際は入手性や価格、開発環境の問題で数種類のマイコンが市場では優性です。トランジスタ技術2014年2月号によると、ARMは、「世界の定番マイコン」としての情報が豊富で、高速な32ビット動作、入手性や価格も問題なさそうです。今回は、この世界定番マイコンについて考えます。

日本産マイコン:RL78とCuteSuite+

日本産マイコンは、ルネサスエレクロトニクスに集約されました。個人的には、このルネエレの新しいマイコンRL78を応援しています。日本語情報の質、豊富さ、無償IDE:CubeSuite+、入手性、価格、性能どの項目でもRL78は優れています。特に、CubeSuite+のコード生成は、周辺機能のGUIによるパラメタ設定とAPI(Application Programming Interface)の生成により、マイコンプログラミングを変えたとも言えます。つまり、ユーザは、API利用と制御に重点を置いたプログラミングが可能となりました。「コード生成があるCubeSuite+があるのでRL78を使う」と言っても過言ではないでしょう。IDEは、世界標準のEclipse IDE版も提供し始め、グローバル化に努めていますが、コード生成なしでは使う気がしません。しかし、半導体は、大手が独り勝ちするビジネスです。今後どのようになるかは、誰にも判りません。

世界定番マイコン:ARMとEclipse IDE

一方、ARM搭載で国内入手性、価格が優れたマイコンは、トラ技にあるようにオランダNXPセミコンダクタ社のLPC8xxやLPC11xxです。秋月電子通商やマルツパーツ館で多くのLPCマイコンボードが販売中で、価格もデバッガ込みで2000円程度、Eclipseベースの無償IDEで開発します。プログラミングに便利な共通規約CMSIS(Cortex Microcontroller Software Interface Standard)使用、割込み専用回路NVIC(Nested Vectored Interrupt Controller)による高速多重割込み、32ビットなのに16ビット並みの消費電力、SWD(Serial Wire Debug)デバッグ機能など、世界定番たる実力を持っています。

英国ARM社の戦略の優れた点は、自らマイコンを製造せずに、半導体メーカにARMマイコンの設計図:コアを販売した点です。半導体各社は、このコアに独自周辺回路を付けてマイコン応用機器を開発/販売します。コアが同じARMなので、開発環境や使いこなし方はどれも同じ技術が使えます。その結果、32/64ビットのマイコンコアでは圧倒的なシェア(Wikipediaによると2004年で61%)を占めています。但し、コード生成機能は無く、ドライバはARM/NXPから提供されますが、CubeSuite+のように洗練はされていません。結局、ドライバを自作や改造する従来のマイコンソフト開発と同じです。

ところがCortex-M0+搭載のLPC8xxは、8/16ビットマイコン市場を狙ったデバイスで、低価格、更なる低消費電力で小型(8ピンから20ピン)、IOポートとペリフェラルを自由に割当てるスイッチ内臓、しかもUARTやI2CなどのAPIはROMで提供など、魅力的です。NXP社は、8/16ビット組込みマイコンキラーとも呼んでいます。全ての機器がネットで繋がる時には、このようなマイコンが使われるような気がします。

トラ技2014年2月号のLPC810も、8ピンマイコンとしては魅力的です。しかし、電源とSWDが専用ピンですので、汎用IOは4本になります。IOピン数が少ないので、18本の汎用IOピンを持つLPC820を診てみます。

LPC820とRL78/G13

LPC820とRL78/G13を比較し、世界定番マイコンの特性を考えます。

  LPC820:M101JDH20 RL78/G13:R5F100LEAFB 備考
入手性と価格 NXP直販、DigiKey等200円 ルネエレ直販、秋月電子等290円 (個人的に)入手性良いサイトの1個あたり価格(2014年1月現在)
チップ性能 32bit/30MHz動作ROM16KB,RAM4KB,Data Flash:なし汎用IO数:18 16bit/32MHz動作ROM64KB,RAM4KB,DataFlash4KB汎用IO数:48 ・LPC820はADCの代わりにアナログコンパレータ実装。・R5F100LCAFBは250円(ROM32KB,RAM2KB,DataFlash4KB)
IDE Eclipse:API自動生成なし言語:英語 CubeSuite+:API自動生成あり言語:日本語 ・LPC820は、UART、I2CはROMでAPI提供。・EclipseはGNUソフト。ルネエレも提供中。
レジスタアクセス CMSIS ルネエレ規定あり 機能的には同じもの
製造 蘭)NXP、英)ARM 日)ルネエレ ARMコアは、Cortex M0+

 

少ないIO対応の内蔵スイッチ、アナログコンパレータ、低価格設定など8/16ビットマイコン置換えを狙ったLPC820の戦略が判ります。Eclipseは、マイコンに限らずソフト開発の標準IDEになりつつありますし、LPC8xx情報の多くは英語で、API生成が無いことは残念です(GNUツール探すとあるかも…)。ルネエレは、RL78/G13以外にも多くの(日本向け)マイコンを国内製造していますので、この品種のみで評価するのはかわいそうですが、世界定番になるには不利な気がします。

良い物を戦略的に製造するグローバル企業連合に対して、様々なしがらみに縛られるルネエレの構図が現れていると言えそうです。国内自動車メーカはよく比較されますが、海外生産や現地モデルにより稼いでいるので威勢が良いです、しかし、国内資源で世界を相手にするルネエレは、とても頑張っていると言えます。

NXPマイコンのテンプレート

世界定番ARMマイコン:LPC820対応のテンプレートを開発するのも良さそうです。これには、既存RL78/G1xテンプレート機能を移植する予定です。その他、こんな機能を実装してほしい、というご要望などがございましたら、お気軽にお知らせください。

ADC変換精度向上方法

2013/12/16発行のルネサスエレクトロニクス アプリケーションノートに「A/Dコンバータの精度を向上させる方法」:R01AN1843JJ0100がありましたので解説します。
このアプリノートは、Smart Analog内臓のRL78/G1Aを対象デバイスとしていますが、「RL78/G13やG14などの普通デバイス」にも適用できる内容が記載されています。そこで、この普通デバイス:RL78/G1xのADC変換精度向上方法のみを抽出します。

RL78/G1xのADC変換精度向上方法

精度向上方法 内容
ハードウエアのノイズ対策 アナログ基準電圧端子:AVrefp/AVrefmの使用
アナログ入力端子に10pF~0.1uFのコンデンサ実装
アナログ信号とデジタル信号の分離、近接回避
基板アナログ領域とデジタル領域の分離、両者の1点グランド接地
ソフトウエアのノイズ対策 ADC実行中のアナログ端子近傍デジタル入出力の停止
ADC変換直後のHALT実施
ADCデータ平均化

全てA/D入力信号に対するノイズ対策です。アナログ端子に高精度チャネルと標準チャネルがあるRL78/G1Aに対し、(おそらく)全てが標準チャネルのRL78/G1xでも、できうる範囲でこの対策に沿ってADCを使うと精神的には安心できそうです。アプリノートには、定量的な対策実施済みのADCデータ平均化なしと5回平均の精度差、他社マイコンとの誤差比較も記載されています。

RL78/G1xテンプレートのADC評価

販売中RL78/G1xテンプレートでも評価したいところですが、評価設備が無いのと、(おそらく)ハードの依存性が高いでしょうから、定性的にADCを診てみます。AVrefp/AVrefm端子の使用、これらに一番近いANI2端子の使用、100ms周期の2回取得値一致によるアナログ値確定、ADC変換直後ではないがHALT利用など、完璧と言えませんが可~良の判定でしょうか。

RL78/G1xテンプレートの移植(その3)

仮想お客様開発ボード:BlueBoard-RL78/G13_30pin-Hへのテンプレート移植の3回目は、その2で示した移植手順3以降を解説します。

レジスタ・バンク設定

マイコンで複数処理をシステムとして上手く動作させるポイントの1つが、割込み処理です。この割込み処理を効率的に使うために、レジスタ・バンクの設定をします。詳しくは、コチラをご覧ください。移植ボードで使うレジスタ・バンク設定は、テンプレートの設定をそのまま使います。

userdefine.h修正

移植ボード回路図からテンプレートのuserdefine.hポート番号の論理名定義を変更します。

userdefine.h変更
userdefine.h変更

移植ボード動作

移植ボードの動作は、1. 電源ON後、uart1へ起動メッセージ出力、2. uart1経由で1文字コマンドを受信し、コマンドに応じてA:ADC値をuart1へ出力、B:ブザートグル出力、L:LEDトグル点滅、3. User SW押し下げでLEDとブザーのトグル動作とします。

移植ボードの動作
移植ボードの動作

テンプレート移植例なので、簡単な動作にしました。関数間の入出力データは、マイコンRAMを使っていますので、関数間の独立性や単体試験は容易です。

テンプレートの移植機能

Version2テンプレート提供中の全機能と、開発ボードへ移植する機能を示します。User SWは、INTP1に接続しているのでコード生成のINTP1割込み処理、Buzzerは自励式なので、LEDドライバで対応します。

ファイル名 機能概要 備考 ボード移植
main.c 起動処理 アプリとドライバ起動 あり
userdefine.h ユーザ追加マクロ ハードウエア割付修正 あり
uart.c uart1ドライバ 受信コマンド解析修正 あり
sw.c swドライバ チャタリング対応済み なし
led.c ledドライバ ブザー出力へ修正 あり
adc.c adcドライバ ノイズ対応済み あり
lcd.c lcdドライバ HD44780互換品対応 なし
pfdl_user.c データフラッシュドライバ RL78_FDL_LIB_VERSION_T04_REN: V1.05使用 なし
pfdl.h ライブラリヘッダ なし
pfdl_types.h ライブラリ追加マクロ なし
pfdl.lib ライブラリ本体 なし
LcdTest.c Lcdテスト用アプリ 1s周期起動 なし

 

動作テスト

移植ボードをパソコンに接続し、コマンドを送受信して動作中のボードを示します。

テンプレート移植動作
テンプレート移植動作

RL78/G1xテンプレートのメリット

BlueBoard-RL78/G13_30pin-Hを仮想お客様開発ボードとし、テンプレートの移植手順と、その方法を説明しました。テンプレート移植が簡単であることがお判り頂けたと思います。殆どがCubeSuite+の再設定と、ハード割付の変更です。ボード動作に関しては、動作に応じた追加や修正は必要になります。しかし、テンプレートで枠組みが決まっているので簡単です。処理の入出力データは、RAM経由なので、他のアプリやドライバの動作タイミングを考えずに、単独の動作タイミングで開発できるからです。

新規ボード開発時には、ボード周辺ハード/ソフトの単体テストソフトを作り、徐々に結合し、最後にシステム全体として動作させます。本テンプレートを開発当初から活用頂けると、関数間データ送受にRAMを使っていること、アプリやドライバ起動が時分割で複数あること、割込み処理効果を上げるバンク・レジスタ設定があること、などの本テンプレートの特徴を活かして、単体テストや結合テストも容易で、かつ、テストソフトそのものも活用できるので、実用プログラムの早期開発に役立ちます

メリットは、早期開発だけではありません。開発から時間がたってプログラムを見直す時に、プログラム解読が容易です。時間経過するとフローチャートなどに も目を通しますが、結局、動作理解には、ソースの解読が必要です。この時、テンプレートで枠組みが決まっているのと、そうでないのとでは、解読の困難さが 大幅に異なります。枠組がシンプルで、関数間がRAMで分離される本テンプレート方式は、単純なソースで記述できるので解読も簡単です

RL78/G1xテンプレートの移植(その2)

RL78/G1xテンプレートの移植手順一覧を示します。今回は、1~2まで解説します。

移植手順一覧

  1. CubeSuite+で、マイクロコントローラ変更(M)… 実行
  2. コード生成(設計ツール)再設定
  3. コード生成出力に使用レジスタ・バンク追記(デフォルトは、全てRB0のため)
  4. フラッシュライブラリ使用時は、リンク・ディレクティブ変更(コンパイラ領域を連続して広く取るため)
  5. userdfine.h修正
  6. 移植ボードの動作処理追加

G13Stick(サブプロジェクト)のテンプレートが移植ボードに最も近いので、これを使い移植します。

マイクロコントローラ変更:R5F100LE からR5F100ADへ

移植ボードのマイコンは、R5F100AD(30pin):RL78/G13 (ROM:48KB)_30pinで、テンプレートのR5F100LE:RL78/G13(ROM:64KB)_64pinと異なるので、マイクロコントローラ変更を行います。R5F100LE上で右クリックすると、マイクロコントローラ変更(M)…メニューが現れますので、R5F100AD(30pin)へ変えます。変更後は、サブプロジェクトのコード生成(設計ツール)が初期化され、「先に端子割り当てを設定してください。」のメッセージが出力ウインドに表示されます。

マイコン変更
マイコン変更

コード生成(設計ツール)の再設定

クロック発生回路の「箱アイコンが開いている」のは使用中を、「閉じている」のは未使用を示します。マイコン変更直後は、箱アイコン横の!マークで端子割当てが必要であることが判ります。また、ウオッチドック・タイマの箱アイコンも開いているので、WDTがデフォルトで使用されることも判ります。

コード生成の再設定
コード生成の再設定

コード生成のパラメタは、全てGUIで設定するのが本来の使い方です。設定箇所が多く、間違いなく設定するのは大変ですが、GUIで変更や修正が簡単にできるのがメリットです。しかし、多くのパラメタをプロジェクト作成毎に設定するのは面倒なので、既成ファイル(xyz.mtudあたり)から必要部分のコピー&ペーストで作成すべくいろいろ試行しましたが、失敗でした。別の方法として、(サブ)プロジェクト毎コピーしてプロジェクト名を変更する方法を以前に示しました。今回は、仮想開発ボード付属プロジェクトのコード生成GUIを横目で見ながら、真面目(?)にこのパラメタを設定します。

※A/Dコンバータは、移植基板付属のコード生成では未使用です。しかし、初期設定などメインプログラムで設定しており実際は使用しています。私は、コード生成を使って設定しました。

コード生成レポート

設定した多くのパラメタがオリジナルプロジェクトと同じかを確認する方法に「コード生成レポート」が使えます。このレポートは、コード生成タブの表示中にのみファイル(F)メニューに表示されるコマンドで、全パラメタがHTML形式で出力されます。オリジナルと両方出力して、エディタで比較すれば、パラメタの一致確認が容易です。

コード生成レポート
コード生成レポート

移植ボードの付属回路とコード生成

移植ボードの付属回路を示します。UART0はD-Subコネクタが未実装なのでUART1を使います。コード生成(G)をクリックして、移植ボードのAPIを生成します。

BlueBoard Peripheral Schematic label CPU pin CubeSuite+ port
User LED LED 20 P16
Buzzer BUZZER 15 P31
User Switch INTP1 17 P50
Reset Switch NRST 6 RESET
ADC ANI2 29 P22
UART0(コネクタ無し) RXD0 25 P11
TXD0 24 P12
UART1(コネクタ有り) RXD1 2 P01
TXD1 3 P00

RL78/G1xテンプレートの移植(その1)

Version2のRL78/G1xテンプレートは、4種の市販ボードに対応しますので、テンプレートとボード動作の確認がすぐにできます。今回は、この4種対応ボード以外のボードに、テンプレートを移植する例を示します。本テンプレートを、お客様開発のボードへportingする際に参考になることを狙っています。内容が複雑で分量も多いので、3回に分けて解説します。

移植ボード選定

第1回目は、ボード選定です。RL78/G1xの発売以降、典型的な市販ボードは、テンプレートでサポート済みです。そこで、お客様開発ボードの代わりに選んだボードは、インドNGX Technologies社のBlueBoard-RL78/G13_30pin-Hです。格安で、E1インタフェース、UART、LED、ブザーなどの周辺ハードが実装済みです。日本でも秋月電子通販から2400円で購入できます。このボードを「仮想お客様開発ボード」とし、テンプレートを移植します。

BlueBlardRL78G13_30pin-H
BlueBoard-RL78/G13_30pin-H(秋月電子通商HPより抜粋)

RL78/G14ボードへの移植

今回porting対象に選んだボードのマイコンは、RL78/G13:ROM:48KB_30pinです。因みに、RL78/G14:ROM48KB_30pin実装ボードも同じボード回路で、違いはマイコンのみ、ピン割付も同じです(詳しくは、NGX Technologies社のHPを参照)。従って、テンプレートをBlueBoard-RL78/G14_30pin-Hへ移植する場合も、ここで示す方法がそのまま使えます。

ボード付属ソフトやアプリケーションノートソフトの問題点

市販ボードには、ボードをテストするプログラムが付属しますが、あくまでハードテストが主眼です。また、RL78のサンプルプログラムやアプリケーションノートのプログラムは、動作ボードを特定せず、単一機能の実装例が主眼です。これらに対して、実用プログラムは、複数機能で各機能がシステムとして上手く動作する必要があるので、ボード付属ソフトやアプリケーションノートのソフトを、そのまま実用版へ流用したくても、中途半端で役立ちません。RL78/G1xテンプレートは、この両者の隙間を埋めるのが役目です。実用プログラムとしてそのまま使えるひな型を目指しています(テンプレートに対する皆様のご意見、ご要望などが御座いましたらお気軽にinfo@happytech.jpへお寄せ下さい)。

では次回から、RL78/G1xテンプレートの移植方法を示します。

マイコン入力処理ソフト

マイコンは、入力データを基に、データを出力する装置です。今回は、入力データのソフト処理について考えます。

入力データには、「ノイズ」が付き物です。例えば、スイッチ入力であれば、チャタリング、AD変換入力であれば、アナログノイズなどです。これらには、ハード的なノイズ対策が行われます。しかし、マイコンに取込むのは最終的にはソフトなので、ソフトの入力ノイズ対策は必須です。

スイッチ入力のソフトノイズ対策

スイッチのチャタリングは、使用するスイッチハードによってチャタリング時間が変わります。タクトSWやトグルSWの場合は、数ms~10ms程度と言われます。スイッチ入力のソフト処理は、入力データをスキャンして、「High」か「Low」のデータ値が連続したらチャタリングが終わった確定データとします。問題は、データスキャン間隔と連続値の比較回数です。スキャン間隔が広く比較回数が多ければ、確定までの時間が掛ります。と、ここまでは、教科書に記載されています。しかし、肝心のソフト調整の記載は少ないようです。

スイッチ入力は、実際のスイッチハードを人が操作して確定データを調整する必要があります。調整ポイントは、スキャン間隔と比較回数です。これらを簡単に調整/変更できるソフトが優れたソフトです。いろいろ方法があるでしょうが、シンプルな方法は、「スイッチスキャン処理を1つの関数として作成し、この関数の実行タイミングをメイン関数で変更する方法」です。これなら、スイッチハードが無い時はシミュレーションでソフト単体のデバッグができますし、ハードが用意できた後は、単体デバッグ済みソフトとスイッチハードを結合してデバッグします。結合デバッグは、メイン関数のスイッチスキャン処理実行タイミングだけを変えて、スイッチハード操作データが正確に取得できるタイミングを探すだけですので簡単です。

このように、ソフトは、ハード無しの状態で単体デバッグができ、かつ、ハード結合デバッグの調整も簡単にできる作りが望ましいのです。この調整を開発の初期段階でどの程度意識したかにより、可搬性の良いソフトができます。

スイッチスキャン処理ソフトの例(2回スキャンデータ一致で入力データ確定)
スイッチスキャン処理ソフトの例(2回スキャンデータ一致で入力データ確定)

多くの教科書やサンプルソフトは、メイン無限ループからサンプル処理を起動します。これは、サンプル処理の説明に重点を置いているのでしょうがないのです。しかし、ハード結合調整まで考えると、ここで示した方法のように、無限ループからの起動よりも、起動タイミングを変えられるメイン関数の方が良いことが判ります。

販売中のRL78/G1xテンプレートは、1ms/10ms/100ms/1s/無限ループの5種類のアプリ起動タイミングを提供します。特に入力ソフト処理には、このタイミングを変えられることが、ノイズ対策やハード依存性を少なくすることに効果的です。タクトSWでは、10ms間隔のスイッチスキャン関数起動と2回スキャンデータ一致により、操作データが正確に取得できました。また、AD変換の例としては、ポテンショメータのAD変換データスキャン関数は、100ms間隔起動と2回スキャンデータ一致によりデータ入力ができました。同じAD変換ソフトで、室温などの変化が緩やかなAD変換入力なら、スキャン間隔を1sにすれば対応できます。

販売中のG1xテンプレートのアプリ起動処理(テンプレートから一部抜粋)
販売中のG1xテンプレートのアプリ起動処理(テンプレートから一部抜粋)

RL78/G1x用テンプレートVersion2販売

RL78/G13とG14ソフト開発や習得に使えるテンプレートをVersion2に改版しました。販売価格は、従来版と同じ1000円(税込)です。

RL78/G1xテンプレートVer2の特徴

従来版は、主として「RL78/G13Stickに対応したプロジェクトのみ」を実装しておりました。従って、動作ボード変更時は、RL78/G13マイコンからG14への変更や、ポートハードの再割付、コード生成パラメタの再設定、など多くの変更が必要でした。 Version2は、「対応評価ボード別のサブプロジェクトでテンプレートを構成」しております。これにより、対応4種評価ボードに、テンプレートをそのままダウンロードし、ボードとテンプレートの動作確認ができます。修正や変更は一切不要です。 対応している市販評価ボードは、

  1. RL78/G13Stick
  2. RL78/G14Stick
  3. QB-R5F100LE-TB
  4. QB-R5F104LE-TB

の4種です。評価ホード名のサブプロジェクトをアクティブプロジェクトに選択すれば、評価ボード実装マイコンとポートハード割付、コード生成パラメタは、設定済みですので、より簡単にボードとテンプレート動作の確認ができます。

テンプレートVer2
テンプレートVer2のサブプロジェクト構成と評価ボード動作

また、本テンプレートをより広い範囲でご活用いただくために、対応外ボードや、マイコン機種変更時の処理一覧と方法をテンプレート解説P9に追加いたしました(P1のみ掲載中ですが、もくじで内容がお判り頂けると思います)。

Template2 Manual Page1
テンプレート解説 P1

本テンプレートが、皆様のRL78マイコンの早期開発、習得のお役にたてば、幸いです。

購入ご希望の方は、メール(宛先:info@happytech.jp)にてお知らせください。銀行振込口座を返信いたしますので、この口座へ代金の1000円(税込)を振込でください。振込確認後、本テンプレートVer2一式(テンプレート解説全ページとテンプレートプロジェクト、ZIP圧縮約3MB)をメールにてお送りします。

RL78/G14 ハードウエア編ユーザーズマニュアル改編

RL78/G14のハードウエア編ユーザーズマニュアルが、Rev. 2.00へ改編されました。

付録Aの改訂履歴をみると、記述が整理されリファインされた感じがします。例えば、P91の未使用端子の処理表などです。出力未使用端子は、オープンのまま、入力未使用端子は、個別に抵抗を接続して、VddかVssへ接続することが判ります。

但し、P60/SCLA0、P61/SDAA0のI2C関連ポートの未使用時は、出力ラッチ設定後、抵抗を接続してVddかVssへの接続が必要です。販売中のRl78/G1xテンプレートは、これらをLED出力ポートとして使用中ですので、安心です。テンプレートご活用中の皆様は、未使用に変更の場合には、上記ユーザーズマニュアルを参照して適切な処理を行ってください。

コード生成ひな型出力とユーザ追加ソースファイルの分離メリット

CubeSuite+のコード生成は、マイコン周辺機能を制御する「デバイス・ドライバ」と「ひな型ソース」を出力します。ユーザは、このデバイス・ドライバをAPI関数としてコールする処理をひな型へ追加すれば、所望動作プログラムが完成します。今回は、このひな型とユーザが追加する処理を分離すると、マイコン依存性が少なくなり、移植性が高まることを示します。

コード生成の「端子割当て設定」は、はじめに必ず設定する必要があることは、以前示しました。そこで、この端子割当てのみを設定し、後は何もせずにコード生成(G)をクリックすると、10個のファイルが生成されます(「r_」は、ルネサス、「r_cg_」は、コード生成が作成したことを意味すると思います)。

コード生成出力ファイル
コード生成出力ファイル

1~4がひな型、5~10がデバイス・ドライバです。クロック発生回路とウオッチドック・タイマは、デフォルトで利用する周辺回路です。ユーザが使う周辺回路をコード生成のGUIで設定すれば、それに応じてr_cg_周辺回路.c、r_cd_周辺回路_user.c、r_cg_周辺回路.hの3ファイルがこれらに追加されます。

r_systeminit.cは、周辺回路の初期設定が生成されていて、r_main.cの実行前にスタートアップで処理されます。r_cg_macrodrive.hは、システム定義のマクロで、r_cg_userdefine.hは、中身なしのスケルトンです。必要に応じて、ここにユーザ定義を追加すれば、全ファイルに自動的にインクルードされます。

起動処理のr_main.c中身を示します。R_MAIN_UserInit()でメイン無限ループ実行前のユーザ追加処理があれば追記し、なければそのまま割込み許可EI()した後、メイン無限ループに入ります。通常は、この無限ループにユーザが処理を書き加えます。

何らかの都合で、コード再生成した場合にも、/* Start user…*/と/* End user…*/の間に書き加えた処理は、そのままコード再生成出力ファイルにマージされますので、追加分は、保持されます。これが、コード生成の一般的な使い方です。この場合は、ユーザ追加処理は、コード生成ファイル内に入ります。

r_main.cの中身
r_main.cの中身

提案は、このユーザ追加処理とコード生成のひな型を分離し、別ファイルにすることです。メイン無限ループにuser_main()を付け加えた例で説明します。user_main();は、別ファイルmain.c内に作成します(「r_」が無いので自作ファイルであることが判ります)。

このmain.cファイル内のuser_main()でコード生成出力のAPI関数を使うので、使用するr_cg_周辺回路.hをインクルードする必要がありますが、user_main()は、多数のAPI関数のコールを使う単純なプログラムとなります。API関数名は、R_CGC_Set_CRCOn ();などのように長い記述になりますが、その分、ソース可読性は向上します。また、RL78/G13とRL78/G14で周辺回路のハードが異なるものがあっても、API関数名は同じものがコード生成されるので、制御するユーザ側は、同じものが使えます。

このように、コード生成出力のひな型とユーザ追加処理を分離すると、移植性が良くなります。最近のマイコン統合開発環境は、CubeSuite+のようにAPI関数を自動生成するものが増えてきました。この場合も、API関数名は、同じか、または近い意味のものが生成されますので、ユーザが追加した処理ファイルがそのまま使える可能性が高まります。API関数を使う側と、API関数を生成する側を分離すると、マイコンの製品依存性も少なることが判ります。

 

販売中のG1xテンプレートは、この考え方で開発しました。RL78/G13とG14で共通に使えます。他シリーズは試していませんが、使えると思います。また、他社製品、例えばARM Cortex-Mマイコンなどにも適用してみたいと考えています。