マイコンテンプレート活用のアプリケーション開発(後半)

マイコンテンプレートを使ったアプリケーションの開発方法(後半)は、手順4:サンプルソフトのテンプレートへの組込みとデバッグ、複数サンプルが同時に動くしくみを解説します。

アプリケーション開発手順(再掲)

アプリケーション完成までの手順1~3の詳細は、(前半)に記述済みです。

  1. 対象動作の明確化
  2. サンプルソフト獲得
  3. サンプルソフトを初期設定とループ処理の2つに分けて解読し、部品化
  4. 部品のサンプルソフトをテンプレートへ組込み、デバッグ

サンプルソフトとテンプレートの構造

サンプルソフトを組込んだテンプレート構造
サンプルソフトを組込んだテンプレート構造

ルネサスのRL78/G13アプリケーションノート:R01AN0451JJ0301をサンプルソフトにした例で説明します。サンプルソフトは、初期設定とループ処理から成ります。hdwinit()が初期設定、main()がループ処理です。このアプリノートでは、無限ループ内でスイッチ入力:P0と、LED出力:P1を同時に行っています。詳細は、R01AN0451JJ0301を参照して下さい。

サンプルソフトのループ処理
サンプルソフトのループ処理

このサンプルをテンプレートへ組込んだテンプレート構造が右側です。テンプレートでは、スイッチ入力処理と、LED出力処理は、別々に起動します。このテンプレート構造から、これら以外の別サンプルN処理や、割込み起動のサンプルX/Y処理が追加可能なことが判ります。例えば、ブザ音の発生処理などをここへ追加すると、簡単に処理の追加ができます。
つまり、テンプレートは、「複数処理を起動する仕組みを、初めから持っている」のです。ここがサンプルソフトと最も異なる点です。
スイッチ入力とLED出力を分離したのは、スイッチの入力スキャンタイミングを、チャタリング対応で簡単に変更することが目的です(補足参照)。

テンプレートに付属している「シンプルテンプレート」が、このスイッチ入力とLED出力を組込んだテンプレートに相当します。また、更に、LCD表示やI2C入出力などの、組込みマイコンに必要となる処理をほぼ全て加え、完成形の形にしたのが、「メニュードリブンテンプレート」です。

マイコンテンプレートの仕組み

  • サンプル初期設定は、丸ごとそのままテンプレート初期設定へ流用 → 複数サンプルの初期設定は、挿入順にそのまま実行
  • 時分割で複数の無限ループ生成 → サンプルの起動関数追加により、複数処理を実行
  • サンプル割込み処理は、そのままテンプレート割込み処理へ流用 → 複数の割込み処理時は、割込み優先順位に注意
  • 関数の引数は、インタフェースRAM経由 → 関数入出力確認がRAMでできるので、単体/結合デバッグ、処理の部品化が容易

インタフェースRAMのメリットは明らかです。例を示します。上記テンプレートに、スイッチに応じてブザ音発生処理を追加するとします。

スイッチ入力処理で、スイッチ入力結果をRAMへ出力します。ブザ音発生処理は、このRAMを参照し、音を発生させます。RAMインタフェースを使えば、どちらの処理もRAMで動作が分離され、そのRAM値により処理が正しく動作しているかが解ります。RAM値は、デバッガで変更やモニタもできますので、処理単体デバッグが簡単です。仮に、片方の処理が未完成であっても、RAM設定/モニタで結合デバッグもできます。

ブザ音処理の追加前と後で、スイッチ入力処理には影響が無いことも判ります。つまり、処理の部品化も可能です。

割込み処理は、優先順位に注意が必要です。テンプレートは、時分割ループ生成のために、SysTickタイマと呼ばれるタイマを使います(その名が示すように、システムのチックタック動作タイマ)。SysTickタイマの割込み優先順位は高く、サンプルで割込み処理が使われても、このSysTickタイマよりは低い優先順位です。

注意が必要なのは、複数サンプルの割込み処理をテンプレートへ追加する場合です。割込みには、デフォルト優先順位があります。このデフォルト順位で処理できるか、変更が必要かの検討が必要です。
デフォルト順位でOKなら、そのままテンプレートへ流用します。変更する場合は、マイコンに依存しますので、データシートを参照して順位を変更してください。

RL78/G1xタイマの検討優先順位設定に関しては、過去のブログ記事を参照してください。

アプリケーション開発手順4のまとめ

  • サンプルソフト初期化関数は、そのまま丸ごとテンプレート初期設定へ挿入
  • サンプルソフトのループ処理は、サンプル起動関数を適切なテンプレート時分割ループへ挿入
  • サンプルソフトの割込み処理は、割込み優先順位に注意し、テンプレートの割込み処理へ挿入
  • 関数間は、部品化のため、RAMインタフェースを使い、単体/結合デバッグを行う

テンプレートですから、部品化した関数の挿入でアプリが完成します。また、部品の再利用を容易にするため、部品単位でファイル化します。複数の割込み処理は、優先順位に注意し、必要なら設定を変更します。関数間は、RAMで切り離し、関数単位でのデバッグを容易にします。

テンプレートを使うと、開発者毎に異なるアプリ開発手法が統一でき、また、処理がファイル単位で部品化できますので、流用性や可読性も良くなります。

マイコンテンプレート販売中

前半、後半と長い説明になりましたが、マイコンテンプレートを使ったアプリケーション開発手順を示しました。シンプルテンプレート、メニュードリブンテンプレートが付属した、4種類のマイコンテンプレートを、各1000円(税込)で販売中です。

IoT向き省電力マイコンのLPC824は、2015/04Eに加わる予定です。

テンプレート名
(MCUコア)
対応マイコン
(ベンダ)
評価ボード:動作確認ハードウエア ブログタグ
RL78/G1xテンプレート v3.1
(RL78-S2/S3
RL78/G13
RL78/G14
(Runesas)
・BB-RL78G13-64(推薦ボード)
・G13スタータキット
・G14スタータキット
・QB-R5F100LE-TB
・QB-R5F104LE-TB
RL78/G13
RL78/G14
LPC8xxテンプレート v2.1
(Cortex-M0+
LPC812
LPC824
(NXP)
・LPCXpressoLPC812 + Baseboard
・LPCXpresso824-MAX + Baseboard
LPC812
LPC824
LPC111xテンプレート v1.1
(Cortex-M0
LPC1114
LPC1115
(NXP)
LPCXpressoLPC1114 + Baseboard LPC1114
Kinetis Eテンプレート v1.1
(Cortex-M0+
Kinetis E
(Freescale)
FRDM-KE02Z40M Kinetis E

 

テンプレートソースをご覧になれば、文書で示したものよりも、より直接的にテンプレートの処理内容がご理解いただけると思います。
また、テンプレート本体とサンプルソフト流用部分のソース間には、5行以上のスペースを入れ、視覚的にもテンプレートと流用部分の切れ目が判る工夫をしています。
サンプルソフト流用部分は、オリジナルの英語コメントですが、テンプレート本体は、日本語コメントで(冗長に?)説明を加えています

概要と仕様の説明資料は、マイコンテンプレートサイトから無料ダウンロードもできます。

テンプレートは、処理が何もない時は、Sleepする消費電力低減機能や、WDT:ウオッチドックタイマ処理、テンプレート本体の暴走監視機能など、アプリとして最低限必要な機能も実装済みです。

零から始めるアプリ開発に比べ、実務に直結した弊社マイコンテンプレートを活用して頂ければ、マイコンの習得と、可読性、流用性に優れたアプリケーションの早期開発ができます。是非、ご検討ください。

 

補足:スイッチ入力処理のチャタリング対応

サンプルソフト:R01AN0451JJ0301は、スイッチ入力処理にチャタリング対応がありません。マイコンの入力処理には、チャタリングに対するノイズ対策は必須です。ソフトウエア対策として、複数回スキャンし、入力が同値の時に、値を確定する方法が一般的です。弊社シンプル/メニュードリブンテンプレートは、この方法を採用しております。

この処理には、何回一致を判定するか、スキャンタイミングはどの程度か、の2パラメタがあり、使用スイッチに応じてこのパラメタを決める必要があります。弊社では、2回一致、10msタイミングで、タクトスイッチ入力処理を行っています。

テンプレートでご利用の実際のスイッチに応じて、これらパラメタ、特に回数のパラメタを変更すると効果が高いと思います。

マイコンテンプレート活用のアプリケーション開発(前半)

マイコンのアプリケーション開発方法として、マイコンテンプレートを使った方法を前後2回に分けて示します。
テンプレートを使えば、マイコン習得と可読性、流用性に優れたアプリが素早く開発でき、開発者毎に異なる開発手法も統一できます。
前半は、アプリケーション開発手順1~3を解説し、次回、後半で手順4を解説します。

アプリケーション開発手順

動くアプリ完成までの手順を示します。

  1. 対象動作、「何を、どうするか」を明らかにする。この段階では、細かいことを気にする必要はありません。例えば、スイッチをスキャンする程度で十分です。
  2. サンプルソフトを探す。メジャーなマイコンは、必ず多くのサンプルソフトをベンダがサイト公開しています。この中から対象動作のサンプルを探します。
  3. サンプルソフトを読む。サンプルソフトは、「初期設定処理」、次に「ループ処理」の2構成で記載されるものが殆どです。たまに、メニュードリブン形式もありますが、これは、弊社メニュードリブンテンプレートと同様、処理抜出を容易にすることを目的にしたものです。
  4. サンプルソフトの必要部分をテンプレートへ組込み、デバッグ。

以上で、アプリが完成します。

マイコンの場合、組込み後、チューニングが必要な場合もありますが、アプリ完成後の処理ですし、アプリにも依存しますので、先ずは、動くアプリ完成までの手順を示しました。

RAD: Rapid Application Developmentツールを使う場合は、2のサンプルソフトをサイトから探す代わりにRADツールを使ってサンプルソフトを生成すると考えれば良く、同じ手順となります。

サンプルソフトベースの部品化

対象動作は、スイッチ入力処理、LED出力処理などできるだけ細かく分割し、部品化することがポイントです。
最後に、これら部品を組み合わせて1つのアプリケーションにします。部品毎にサンプルソフトを見つけ、デバッグすれば、バグもこの部品内に閉じ込めることができます。また、部品単位の流用性も高まります。

サンプルソフトを組合せてアプリケーション開発
サンプルソフトを組合せてアプリケーション開発

上級者との差が出る箇所と対策

手順1~3で重要なことは、「対象動作の明確化」と、「サンプルソフトの分離読解」です。分離解読とは、初期設定とループ処理を明確に分離して解読することで、処理内容は、大体把握すれば十分です(後述サンプルソフトの読み方参照)。

上級者は、多くのサンプルソフトを経験しているので、的確に対象動作を絞り込め、分離解読が、早く深い点が違います。さらに、上級者は、個人的なテンプレートを既に持っているので、サンプルの流用、組込みとデバッグが効率よくできます。

弊社マイコンテンプレートを活用すると、

  • サンプルソフトの組込みが簡単な、テンプレート獲得
  • 処理単体/結合デバッグが簡単で部品化も容易な、RAMを使った処理インタフェースの獲得

ができますので、上級者との差分を誰でも補えます。

サンプルソフトの選出

何回かサンプルソフトを読むと、より明確な対象動作が選べるようになります。逆に、サンプルソフトが見当たらない時は、絞り込みが不完全、または対象が間違っていると言えます。初めに全てのサンプルソフトをざっと眺めた後で、アプリをイメージするのも良い方法です。

但し、スイッチ入力処理は、注意が必要です。スイッチには、チャタリング対策が必須です。この対策は2つあり、1つがハードウエア、もう1つがソフトウエアの対策です。両者併用もあります。
個人的には、ハード対策の有無に関係なく、ソフト対策は必要と考えます。弊社シンプルテンプレートでチャタリング対策済みのスイッチ入力処理を添付しているのは、この理由からです。
チャタリングは、使用するスイッチでタイミングが異なりますので、対策済みサンプルをベンダは提供しにくいと思います。チャタリングに関しては、以前のブログ記事や、ネット検索すると、多くの情報がありますので、そちらも参照して下さい。

サンプルソフトの読み方

サンプルソフトは、「木を見て森を見ず」にならないように、細かいことは気(木?)にせずに、初期設定とループ処理の2つに分けて読みます。

初期設定は、コメントに注意し、周辺回路の使用方法が開発するアプリと同じがどうかを見極めます。同じなら、丸ごとそのままテンプレートへ流用します。異なる場合は、データシートなどで変更箇所を特定し、実際にサンプルに変更を加え、結果が正しく動作することを確認しておきます。

ループ処理は、無限ループで処理するものと、割込みで処理するものに大別できます。割込み処理は、基本的にそのままテンプレートへ流用します。
無限ループ処理は、何をトリガにアプリを起動しているかが解れば十分です。多くの場合、フラグポーリングやカウンタなどです。この起動トリガで関数化し、テンプレートへ組込みます。

テンプレートの狙い:複数サンプルソフト流用

よほどの上級者やツワモノを除けば、アプリ開発は、サンプルソフトの流用が王道です。敢えてリスクをおかしてサンプルソフト以外の方法でマイコンを動かす必要はないからです。ベンダサンプルは、典型的動作ですので、先のスイッチ処理の例外を除くと、流用可能なものが多いのも理由です。

但し、サンンプソフトは、1個の周辺回路の動作説明が主なので、実際のアプリで必要となる複数の周辺回路を組合せる記述はありません。これが、開発者毎に手法が異なる原因です。弊社テンプレートは、これに対して1つの解を提供します。

弊社マイコンテンプレートは、サンプル処理の流用が簡単で、複数サンプル処理を組込むのも容易です。従って、サンプルを活かした動くアプリの早期開発ができます。また、本テンプレートを用いれば、開発者毎で異なる開発手法を統一でき、可読性や流用性も高まります。次回、後半で詳細を説明します。

アプリケーション開発手順1~3のまとめ

  • 細かい単位の対象動作サンプルソフトを見つけ、初期設定とループ処理の2つに分けて読む
  • サンプルソフトを部品と見なし、複数部品の組合せでアプリケーションを開発
  • サンプルソフト獲得方法は、ベンダサイト、RADツールがある

次回は、手順4の部品化したサンプルソフトのテンプレートへの組込みとデバッグ、複数サンプルが同時に動くしくみを説明します。

 

補足:チューニングとマイコン性能

アプリケーション開発で最も厄介なのは、実はチューニングです。

アプリに最適なマイコンを選定していれば、一部アセンブラ化などのチューニングなしで動くアプリができます。しかし、この選定失敗、もしくは、選定マイコンが古いのにアプリ追加などで、性能を絞り出す場合などの、最後の手段としてチューニングもありえます。
但し、苦労してチューニングしても、トラブルフリーの経験がないので、絶対に避けるべきだと思います。結局、高性能マイコンへの置換えという結果になります。

では、マイコン性能はどの程度が正解でしょうか? マイコンでシステムを制御する場合、通常アプリ以外の処理ソフト、例えば、ハード/ソフトの出荷時のセルフテストや、入力が一定時間ない時のデモンストレーション表示なども必要です(自動販売機などでおなじみですね)。ここでは、これらソフトを「システム運用ソフト」と呼びます。

これらシステム運用ソフトは、通常アプリ動作中には、並列処理をしませんので、消費するのはROM/RAMです。ソフト開発者は、ROM/RAM量を見積もる時に、これら通常動作には現れないシステム運用ソフトも考慮する必要があります。経験では、通常アプリと同程度、つまりトータル2倍のROM/RAMは必要と思います。

また、必要となるマイコン性能は、通常アプリと、上の例で示したようなシステム運用ソフトの両方で考慮すべきです。処理能力に十分な余裕がないと、再現性のない取れにくいバグ発生のリスクも高まります。この処理能力も、2倍程度の余裕が必要だと思います。

ハードウエア設計の「ディレーティング50%」と同様、2倍の余裕がマイコン設計には必要と思います。

新しいRL78/I1Dからマイコントレンド抽出

ルネサスの業績が黒字に回復し、「縮小と撤退」から「拡大と攻勢」へ転換したそうです。うれしいです。このルネサスからRL78/I1Dという新しいRL78マイコンが2月に発売されました。方針転換後に厳選した新製品と思われるので、その情報から最新マイコントレンドを考えました。

従来RL78マイコンと新マイコンRL78/I1Dの違い

RL78/I1D説明資料P11より抜粋
RL78/I1D説明資料P11より抜粋

「RL78/I1D」ご紹介資料P11から、従来RL78/G13、G14とRL78/I1Dの差が解ります。RL78/I1Dは、S3コアで、ADC分解能、オペアンプ、RUN動作電流などの機能が強化されています。また、従来RL78では、動作電圧に応じてオペレーションモードが固定であったのが、ソフトで変更できるようになりました。これにより、電源電圧が低下しても機能停止せず、しかもRUN動作電流も激減しましたので、長い期間マイコンが動作可能です。

さらに、非同期タイマも追加され、センサの長時間間欠動作もCPU停止:STOPのまま可能となりました。CPU起動は、「高速wakeup」対応の中速オンチップオシレータを使うと4us程度で可能です。
※RL78/G1xテンプレートは、CPU:HALTで低消費電力対応しているため、0.5us/32MHzで起動します。

ADCの計測データは、DTCで直接RAMへ転送可能です。DTCとは、簡単に言うと、DMAがメモリアクセス専用のCPU代替転送機能なのに対し、より複雑なCPU代替処理にも対応できるものです。

マイコンドレンド:省エネとIoT

2010年発売の汎用マイコンRL78/G13やG14との違いから明らかなように、最新マイコンRL78/I1Dは、オペアンプ内蔵や高速オンチップオシレータ上限が24MHz、48ピンまでの小パッケージサイズなどから、センサアプリに特化したマイコンです。

RL78/G14の高速オンチップオシレータの実質周波数上限は32MHzなので、I1DのS3コア性能は多少劣りますが、低消費電力とより低電圧での動作など、そのトレンドは、「省エネ」追求です。

IoTでは、このRL78/I1Dのような省エネマイコンが数百億個使われと予想され、価格は、使用個数に応じて激減しますので、RL78/I1DもG13やG14と同程度、またはより低価格になるかもしれません。このように、IoTアプリケーション向けの周辺回路を持つ省エネマイコンでのシェア獲得がルネサスの狙いでしょう。汎用マイコンの機能を、IoTに会わせて見直した結果とも考えられます。

RL78/I1D CPUボード入手できず

RL78/I1D CPUボード
RL78/I1D CPUボード

RL78/G1xテンプレートは、このRL78/I1Dへそのまま流用できるハズです。DTCやADCなどの周辺回路制御は、機種毎に異なりますが、テンプレート本体は、マイコンやベンダが異なっても基本的に同一だからです。
※RL78の場合は、ショート・ダイレクト・アドレッシングsreg領域を使ってARMマイコンテンプレートと比べて、少しチューニングしています。

RL78/I1DのCPUボード:RTE5117GC0TGB00000Rでテンプレートを試そうとしましたが、2015年2月現在、個人向け販売サイトには残念ながら見つかりません。入手可能になれば試す予定です。RL78/I1DがIoT汎用マイコンになる可能性が高いからです。

マイコントレンドに合わせたIoTテンプレート

従来テンプレートは、シンプルテンプレート(テンプレート動作理解が目的)と、メニュードリブンテンプレート(所望処理の簡単な取出しが目的)の2本立てでした。

マイコンドレンドが「省エネ」で、DTCやDMAを使った「マイコン内データ転送も、汎用化」しつつあるので、これらに合わせたアプリテンプレート:IoTテンプレート(仮称)も今後検討したいと思います。

データフラッシュライブラリ Type04 V1.05 リリースノートのリビジョンアップ

2014年12月16日のRunesas Toolニュースで、弊社RL78/G1xテンプレート使用中のデータフラッシュライブラリType04リビジョンアップのお知らせがきましたので、解説します。

データフラッシュライブラリ本体変更なし

変更箇所は、ユーザーズマニュアルとリリースノートの部分で、「ライブラリ本体は変更なし」です。従って、「RL78/G1xテンプレートも変更なし」です。

QB-R5F100LE-TBのサンプルプログラム添付

ユーザマニュアルにも変更があるようですが、重要なのは、リリースノート8章のRL78/G13 QB-R5F100LE-TB ボードのサンプルプログラムです。

この8章に、簡潔にデータフラッシュライブラリのCS+での使い方と、リンク・ディレクティブ設定が書かれています。ライブラリ使用をご検討の方は、先ずこれを読んで、理解不足箇所をユーザーズマニュアルで補足すればポイント理解が早まると思います。

データフラッシュライブラリ理解は進むが…

添付サンプルプログラムは、CS+のプロジェクトファイルではありません。リリースノート記述がCS+対応なだけに、個人的には、不親切で残念な気がします。ストレージ容量削減のためでしょうか? データフラッシュライブラリを使うレベルの技術者なら、Cソースとリンクディレクティブファイルのみで十分と判断したためでしょうか? 疑問です。

これらファイルをCS+のプロジェクトへ組込む時の留意点は、リリースノート記載の高速オンチップ・オシレータを32MHzへ設定する以外にも多々あると思いますが、これらをいちいち細かく説明すると説明が長くなります。最も効率的な方法が、実際のCS+のプロジェクトを提供する事だと思います。せっかくのサンプルが、何らかの問題で動作しなければ徒労に終わるからです(「何らかの問題」は、マイコン開発では頻繁に発生します)。

弊社テンプレートファイルは、対象マイコンの標準的な無償開発環境と評価ボードで動作します。RL78/G1xテンプレートでは、CS+プロジェクトでQB-R5F100LE-TBを含む4種類の評価ボードをサポートしており、そのままボードにダウンロードすれば動作確認ができます。このテンプレートへ、リリースノート添付サンプルを組込むと、CS+設定不足やミスなどを避けて確認ができると思います。

弊社テンプレートは、このようにお手元にあるサンプルプログラムをそのまま流用/組込み可能なことも特徴の1つです。テンプレートの活用方法として、この組込み容易性にも留意して頂けると嬉しいです。

サンプルプログラム説明の重要性

動作プログラムは、いろいろなパラメタが設定済みで、その結果、動作するものです。パラメタ設定がデフォルトなら問題なしですが、変更した箇所は、だれもが判るような工夫、解説は必要と考えます。どの程度説明するかが悩ましいトコロですが、弊社テンプレート説明資料は、極力この方針で作成しております。ご購入者様のご質問や、お問い合わせ内容などは、テンプレート改版時に反映させますので、お気軽にcustomerservice@happytech.jpへお問い合わせください。

マイコンテンプレートのサイト立上げのお知らせ

マイコンテンプレート関連の情報を、1ページにまとめた専用サイトを2つ立上げました。

ブログは、マイコンテンプレートの開発情報や開発経緯、Tipsなどを時系列で記載します。
ブログを最後まで読んでいただく手間を省くため、重要内容を抽出し再編しました。
紆余曲折の検討結果が、最新版テンプレートの状況になり、専用サイトにまとめられたと考えてください。

マイコンテンプレートサイト

マイコンテンプレート専用サイト
マイコンテンプレート専用サイト

記載マイコンテンプレートは、下記です。

  • Cortex-M0/LPC111xテンプレート
  • Cortex-M0+/LPC8xxテンプレート
  • S2/S3コア RL78/G1xテンプレート
  • Cortex-M0+/Kinetis Eテンプレート

サイトの「もくじ」をクリックすると、記載位置へジャンプします。スマホなどの小さい画面でも観やすいように、解像度の高いテンプレート動作中写真も掲載しております。

アプリケーション開発手順サイト

マイコンアプリケーション開発手順サイト
マイコンアプリケーション開発手順サイト

マイコンアプリケーションの開発手順を1ページにまとめました。
マイコンテンプレートを使ってアプリを開発する時の、10手順と、2補足を掲載しています。

Processor Expertの解析

以前示したKinetis Eソフト開発の最重要要素、Processor Expert: PE、これがテンプレート開発の大きな障壁です。今回は、簡単なPE適用例を示し、PE利用指針とテンプレートに自作PEサンプルソフトを添付する経緯について示します。

3レベルのProcessor Expertコンポーネント

PEは、マイコン周辺回路パラメタのGUI設定、パラメタ整合性チェック、デバイスドライバ生成、ユーザソース所定位置へのドライバ自動挿入を行うアドオンツールです。CodeWarrior: CWとKinetis Design Suite: KDSで同じものが使われています。これらの機能は、ルネサスRL78マイコンのコード生成と同じです。PEは、さらにOperating System: OSへの適用と移植性を強く意識した設計になっています。

このためPEコンポーネントには、3つのレベルがあります。LDD(論理デバイスドライバ)レベルコンポーネント、Highレベルコンポーネント、Lowレベルコンポーネントの3つです。レベルは、コンポーネント抽象度を示し、LDD>High>Lowの順に高く、移植性も高くなります。

コンポーネントレベル 説明
LDDレベル OS利用が前提で、マイコンハードウエアとOS分離が目的のHAL: Hardware Abstraction Layerを適用したデバイスドライバ。OSや機種が変わっても、移植性が高いソースコード生成が可能。
Highレベル OSを使わない一般的マイコンのデバイスドライバ。機種が変わっても、移植性が高いソースコード生成が可能。
Lowレベル 使用マイコンに依存したデバイスドライバ。周辺回路毎の初期化コンポーネントとメソッド/イベントAPIを提供。

PE想定OSは、freescale無償提供のMQX Liteですが、FreeRTOSなどにも適用できそうです。

Highレベルコンポーネントは、LDDコンポーネントを流用

HighレベルコンポーネントとLDDコンポーネントは、別物ではありません。LDDコンポーネントのパラメタの一部を自動設定し流用しています。ツール開発の立場から言えば、当然でしょう。

Processor Expartコンポーネント使用例

LDDレベル

GPIO処理例を示します。無限ループを回る度にGPIO出力ピンに接続したLEDが点滅する例です。

LDDレベルコンポーネント使用例
LDDレベルコンポーネント使用例

面倒なのは、全LDDレベルのAPIに1行目で定義したパラメタが必要なことです。10行目のトグル動作でさえこのパラメタが必要です。4行目の初期化は、ピン初期値がHighかLowか、出力方向か入力方向かなどのGUIで設定したパラメタが自動設定されます。

Highレベル

LDDコンポーネントの代わりにHighレベルコンポーネントを使うと、10行目のパラメタが不要になります。但し、これは、別のところで下記マクロが追加されたために不要になったようにソース記述ができるだけです。
#define Bit1_NegVal()       (Bit1_NegVal(LDD_TdeviceData))

結局、PEコンポーネントは、LDDレベルもHighレベルも同じものを使っていて、ソース記述時にパラメタ1個分簡素になるだけです。多くのパラメタを使ってAPI移植性を高めているのです。ルネサスのコード生成と比べると、APIパラメタが多く、回りくどく感じます。

Lowレベル

Lowレベルのコンポーネントを使用すると10行目のトグル動作は、下記になります。
GPIO_PDD_TogglePortDataOutputMask(FPTB_BASE_PTR, (1<<18));

Lowレベルは、周辺回路毎にメソッド/イベントAPIが提供され、パラメタで具体的な処理位置を指定する必要があり、初期化処理にも多くのLowレベルAPIコールが必要になります。

Processor Expert の課題と利用指針

PEユーザガイドに各レベルコンポーネントの機能説明はありますが、具体的な使用例、つまりサンプルソフトがありません。使用例が無いと機能理解が困難になります。特にLowレベルの記述は、LDDやHighレベルに比べ少ないです。LDDかHighレベルのコンポーネントを使うことがPEの前提条件で、Lowレベルは、LDDレベルでカバーできない部分のみに使用するのだと思います。

以上から、LDDレベルコンポーネントを使ってテンプレートを開発する方針とします。そこで、開発に使えそうなサンプルソフトを調査しました。

FRDM-KE02Z40MのCW、KDSサンプルソフト一覧

2014年11月時点で、テンプレート開発評価ボード:FRDM-KE02Z40Mに使えるサンプルソフトを示します。NonPEとは、Processor Expertを使わない従来タイプのデバイスドライバのことです。因みに、NonPEでGPIOトグルを記述すると、PEのLowレベルに近い記述で、下記になります。
GPIO_Toggle(GPIOB, GPIO_PTE7_MASK);

サンプルソフト(2014/11E現在) サンプル数 概要
CW10.6付属 PE Examples 1 評価ボードの3軸加速度センサプロジェクト。使用コンポーネントのデフォルト設定値からの変更箇所が判らない問題あり。
CW10.6付属 NonPE Examples 29 最も多くのサンプルソフトがあるが、CW専用ドライバでKDSへ移植できない。
KDS1.1.1付属PE Examples 0 KDS1.1.1付属サンプルソフト無し。自作PEサンプルソフトをKinetis Eテンプレートに添付予定。
KDS1.1.1付属NonPE Examples 0 KDS1.1.1付属サンプルソフト無し。
Kinetis SDK1.0.0 0 FRDM-K22Fボードなど5種対応中だが、評価ボード対応版無し。

この一覧表から、現時点のFRDM-KE02Z40Mサンプルソフト状況を纏めると以下となります。

  • CW PEサンプルソフトは、KDS PEサンプルソフトへのポーティング可能
  • CW NonPEサンプルソフトは、KDS NonPEサンプルソフトへのポーティング不可能
  • KDSとPEを開発環境に選ぶと、テンプレート開発評価ボードで使えるPEサンプルソフトは、CW版をポーティングして得られる3軸加速度センサプロジェクト1個のみ

CWのPEサンプルソフトは、KDSへ移植が可能ですが、一部手直しが必要です。また、一番サンプル数が多いCWのNonPEサンプルソフトは、CW専用ドライバで開発されていてKDSへ移植できません。

KDS Processor Expert サンプルソフトをKinetis Eテンプレートへ添付

販売予定のKinetis Eテンプレートも従来テンプレートと同様、シンプルテンプレートとメニュードリブンテンプレートの2構成です。さらに、現在のPEサンプルソフト状況を考えると、KDSのPEで動作する自作サンプルソフトをテンプレートと同時提供すれば、テンプレート付加価値が上がります。つまり、KDS1.1.1付属PE Examplesのサンプル数0を補完する試みです。

次バージョンKDSでは、freescaleからKDS PE付属サンプルが提供されるかもしれません。しかし、少なくともそれまでの間は、KDS1.1.1のProcessor Expertを使ってFRDM-KE02Z40Mで動作するサンプルソフトは有りません。自作サンプルソフトが目的でテンプレートを購入して頂ける方がいるかもしれません。

繰り返しになりますが、PEのユーザガイドには、十分な機能説明はあります。しかし、サンプルソフトが無いと、せっかくの機能説明も上級者以外には意味不明になります。また、コンポーネントのデフォルトパラメタ設定値のどこを変えたサンプルなのかも明示すると、より解りやすいものとなるでしょう。テンプレート説明資料では、この部分も明らかにします。

テンプレート対象のKinetis KEマイコンは、低価格で非常に良くできたARM Cortex-M0+マイコンです。統合開発環境は、CWからKDSに変わります。KDSでは、OS使用有無にかかわらず、PEを習得しているほうが、KEシリーズだけでなく、全Kinetisマイコン開発のために有益です。

FRDM-KE02Z40M評価ボードで動作するKinetis Eテンプレートと、多くのKDS Processor Expert サンプルソフトを提供すべく開発中です。

Kinetis Eソフト開発のポイント:Processor Expert

2014年末発売予定のfreescale Kinetis Eテンプレートソフト、この開発にProcessor Expertを使いこなすことがポイントと考えた理由を示します。

Processor Expert :PEとは

PEは、ルネサスRL78/G1xのCS+コード生成ツールに相当します。使用周辺回路のパラメタをGUIで設定できます。例を示します。Kinetis Eテンプレート開発で使うボード:FRDM-KE02Z40Mと、その赤LEDをPWM点灯する時の設定です。設定ミスがあると、そのパラメタが黄色で表示されるので、すぐに修正や変更ができます。

FRDM-KE02Z40MとProcessor Expert設定画面
FRDM-KE02Z40MとProcessor Expert設定画面

設定後、コード生成ボタンを押すと、ユーザソース所定か所にPE生成コードが自動挿入されます。ユーザは、PEが生成したAPIを使ってアプリ開発に着手します。PE設定パラメタを変更後、再生成しても、ユーザソースは残ったまま、生成コードが再挿入されます。

つまり、周辺回路APIをPEで生成 → 動作パラメタはAPI内部に隠ぺい → ユーザソースそのものの流用が可能、です。CS+のコード生成ツールと同じ目的です。

PEを使わないサンプルソフト

旧来のマイコンソフト開発は、デバイスドライバ開発担当が、このAPIを自作していました。高性能APIが自作できますが、機種が変わるとAPIも変わることが多く、同じ処理でもアプリ作り直しが必要でした。API自動生成ツールPEは、アプリ作り直しの回避と再利用を可能にするツールです。

もちろん、Kinetis EでもPEを使わずに旧方法のアプリ開発もできます。IDE付属サンプルソフトの多くは、この旧方法で提供中です。サンプルソフトの目的が、1個の周辺回路のシンプルな説明に主眼があり、PEを使うよりはこの目的に適していること、従来からあるサンプルソフトをそのまま流用したこと、などが理由だと思います。

因みに、PEユーザガイドは、約200ページ、CS+のRL78 APIリファレンス編は、400ページ以上のボリュームがあること、などもAPI自動生成ツールがサンプルソフトで使われない原因かもしれません。良いツールには、それなりの解説書が必要です。ただ、背景記述が少ないのと、クイックレファレンスがほしいです。

iPhoneやスマホを使うと、本当に良いツールは、マニュアル無しでも使えるモノかな?とも思いますが、コンシューマ向けと、マイコン開発のようにプロフェショナル向けのモノとでは違って当然ですね。

テンプレート開発ボードのPE

テンプレート開発ボードFRDM-KE02Z40MでPEが自動生成する周辺回路一覧を、アルファベット順に示します。

テンプレート開発ボードのコンポーネントリスト
テンプレート開発ボードのコンポーネントリスト

多くの周辺回路=Componentの設定が可能です。使用頻度が高いタイマ、GPIO、UART関連、また、ボード実装のTSS: Touch Sensing Softwareや、3軸加速度センサ接続のI2CもKinetis Eテンプレートで使う予定です。 Component Levelとは、アプリ流用の容易さを示していて、Logical Device Driver :LDD、High、Lowの順で流用性が高くなります。

例えば、Lowレベルコンポーネント使用時、既に動いているアプリを別機種へ移植した時に、想定外動作をする時は、このLowレベルコンポーネントからデバッグしていくと良いかもしれません。これはCS+コード生成には無かった機能です。

また、これらPEの設定を出力し、別プロジェクトへ移植する機能もあります。これもCS+コード生成にはありません。CS+は日本語操作できる良くできたIDEですが、多くのコード生成パラメタを別プロジェクトへ引継げないのが(唯一の)欠点だと思います。

PE出力は、テンプレート使用中IDEのCode Warrior :CWとKinetis Design Suite :KDSのどちらにも移植でき、CWからKDSへ変更してもそのまま使えます。Kinetisシリーズ開発環境が、今年CWからKDSへ移行中ですので重要です。

つまり、PEを使えば、

1.アプリ流用性が高まる
2.CW←→KDSのIDE変更は問題なし
更にfreescaleマイコンは(おそらく)同じ周辺回路を使っており、それらのAPIがPEで生成ができるので、
3.freescaleマイコン機種変更も問題なし(の可能性あり)
など3拍子揃ったソフト開発が期待できる、これらがAPI生成ツール:PEをfreescale Kinetis Eテンプレート開発に使う理由です。

RL78/G1xテンプレートVersion3販売

RL78/G13とRL78/G14の習得、アプリ早期開発に使えるテンプレートがVersion3に進化しました。販売価格は、従来版と同じ1000円(税込)です。

RL78/G1xテンプレートVer3(第3版)の特徴

Ver3は、テンプレート動作環境を、「4種CPUボードとRL78/G1x開発推薦ボードの2種類」とし、CPUボードには、「シンプルテンプレート」を、推薦開発ボードには、「メニュードリブンテンプレート」を適用したものをセットで販売します。

テンプレート適用例を、CPUボード実装ハードのみを動作させるシンプルなテンプレート適用例と、RL78/G1x開発推薦ボードへ、組込み機能をほぼ全て盛込み、UARTメニューで処理選択できるメニュードリブンテンプレートの2例を示すことで、Ver2に比べ、よりテンプレート動作が解りやすくなり、テンプレート機能の応用、流用が簡単になりました。

RL78/G1xテンプレート対応ボード一覧

Ver3対応ボード 名称 ボード実装制御ハード
CPUボード RL78/G13 Promotion Board LED
RL78/G14 Promotion Board LED x2, SW
QB-R5F100LE-TB LED x2, SW
QB-R5F104LE-TB LED x2, SW
推薦開発ボード BlueBoard-RL78/G13_64 LED, トリマ, SW, ブザー, LCD, UART, など

 

テンプレート説明資料

テンプレート説明資料のP1とP2を示します。

テンプレート説明資料P1
テンプレート説明資料P1
テンプレート説明資料P2
テンプレート説明資料P2

説明資料には、もくじの内容を記載しております。これもVer1/2のご購入者様のご意見、ご質問などの内容から、解りにくい箇所を加筆修正し、より解りやすくブラッシュアップいたしました。

本テンプレートが、皆様のRL78/G1xマイコン習得、アプリケーションの早期開発や評価のお役に立てれば幸いです。

購⼊ご希望の⽅は、メール(宛先:info@happytech.jp)にてお知らせください。銀⾏振込⼝座を返信いたしますので、この⼝座へ代⾦の1000円(税込)を振込でください。振込確認後、本テンプレートVer3⼀式(4種CPUボード別のシンプルテンプレート + 推薦開発ボードのメニュードリブンテンプレート + テンプレート解説全ページ、ZIP圧縮合計約3MB)をメールにてお送りします。

RL78/G1x開発役立ち4ドキュメント

2014/6/20ルネサス発行のRL78/G1x開発に役立つ資料を4つお知らせします。このページ一番下、その他に分類されている資料で、NEW!マークが付いた以下4タイトルです。

1.RL78ファミリ用CコンパイラCA78K0R SADDR領域とCALLT命令の使用

SADDR領域とCALLT命令の効果を解りやすく解説しています。

販売中のRL78/G1xテンプレートも、SADDR領域は使っていますが、CALLT命令は、コードサイズは小さくなるものの、速度が遅くなるので使いません。RL78/G1xは比較的大きなROMを持つマイコンなので、コードサイズよりも速度を優先して設計したためです。

有効なSADDR領域ですが大きさに限りがあるので、コンパイルオプションのROM/RAM使用量を表示し、上限に近い場合には、配置変数の選択も必要でしょう。

2.RL78ファミリ用CコンパイラCA78K0R データフラッシュへの定数の配置方法

ROM、RAM、データフラッシュの3領域を持つRL78/G1xデバイスで、データフラッシュ領域へconst定数を配置する方法を記載しています。

RL78/G1xテンプレートは、データフラッシュライブラリを使い4KBデータフラッシュ領域をEEPROM的に使っています。このような使い方が不要な場合には、巨大テーブルの定数配置などで解説の方法も使えそうです。

3.スタック領域の変更方法

4.リンク・ディレクティブの説明

どちらの資料もROM、RAMへのセグメント配置に関する基本的な解説です。文章や図にすると、説明が長くなるのが欠点ですが、まとまっているので理解し易いでしょう。

RL78/G1xテンプレートでは、コンパイラ領域がRAM内で連続するように、データフラッシュライブラリの占有領域を決めるリンク・ディレクティブ設定を行っています。また、作成する関数間インタフェースは、基本的に関数引数を使わずRAMを使います。従って、関数単独のデバッグが容易で、スタック使用量も引数利用に比べ少ないのが特徴です。結果として、スタック領域の配置は、コンパイラにお任せでも問題なく動作します。

LPC81x開発・習得にはLPCOpenライブラリが適す

LPC81x開発・習得にあたり、LPCOpenライブラリと従来ライブラリ(LPCCloseと呼ぶ)を比較し、LPCOpenがアプリ開発・習得に適すことを示します。

LPCCloseライブラリの UARTサンプルソフト

UARTサンプルソフト
UARTサンプルソフト

従来ライブラリ:LPCCloseのUARTサンプルソフト、“uarttest.c”の最初の部分を抜粋しました。前記事に示したライブラリ利用の為に、コア制御に”LPC8xx.h”、周辺回路制御に、”lpc8xx_clkconfig.h”と“lpc8xx_uart.h”のヘッダファイルをインクルードした後に、サンプルソースを記述しています。このUARTサンプルは、UART初期設定後、PCへ”Hello world!”とUART送信し、PCからのUART受信文字をエコーバックします。動作中のデバッガ画面とターミナル画面を示します。

システム動作クロック12MHzのUART通信
システム動作クロック12MHzのUART通信

システム動作クロック変更

全てのLPCCloseサンプルソフトは、システム動作クロック(SystemCoreClock)をLPC81x内蔵RCオシレータ12MHzで動作させています。この速度を変えるには、以前の記事に書いたクロックパラメタ算出ツールが便利です。前の記事は、LPCOpenライブラリでの例でしたので、LPCCloseライブラリで24MHzに変える例を示します。

クロックパラメタ算出ツール
クロックパラメタ算出ツール

このツールから、クロック速度を24MHzへ変えるには、SYSPLLCTRL:0x41を0x23へ、MAINCLKSEL:0x0を0x3へ、SYSAHBCLKDIV:0x1を0x2への3変更で良いことが判ります。これらは、CMSIS_CORE_LPC8xxフォルダの”system_LPC8xx.c”に記述されています。

システム動作クロック変更箇所
システム動作クロック変更箇所

これらパラメタを変更し、デバッガプローブ機能でクロックが24MHzに変わったことを確認後、UART通信を行うと、ターミナル側に文字化けが発生します。変更箇所はパラメタのみです。つまり、LPCCloseライブラリのUARTサンプルは、残念ながら24MHzでは正常動作しないことが判ります。

システム動作クロック24MHzのUART通信(文字化け)
システム動作クロック24MHzのUART通信(文字化け)

但し、gpioなどの他ライブラリはどの速度でも問題なく動作します。従来ライブラリUARTに何らかの原因があることは確かです。この原因追究は、スキルアップに繋がります。しかし、「ライブラリが提供するAPIを活用したアプリ開発・習得からは、かなりの回り道」となります。

LPCOpenライブラリのUART動作

一方、LPCOpenライブラリは、システムクロックが12MHz、24MHz、30MHzでもUARTは正常動作します。前記事のLPCOpenとLPCCloseライブラリの使い易さ比較でLPCOpenの方が圧倒的に簡単であることも考慮すると、LPC81xの開発に、敢えて「従来ライブラリLPCCloseを使う意味・理由はない」と思います。

残念なのは、開発環境LPCXpressoの付属サンプルソフトが、従来ライブラリLPCCloseであることです。慣れない環境で初心者がLPC81xを検証する時は、サンプルと評価ボードを使います。今回示したシステム動作速度を変えた時、サンプルが正常動作しない問題は、開発や理解に大きな障壁となります。もし、従来ライブラリの代わりに、LPCOpenライブラリのサンプルが初めから付属していれば、この問題は回避できます。

LPCOpenライブラリとLPCOpenテンプレートの薦め

最新版のLPCOpenライブラリのリンクはココです。LPC81xアプリ開発・習得には是非、このLPCOpenサンプルソフトを使うことをお勧めします。

また、「LPCOpenライブラリを使い、そのまま実務にも使えるLPC8xxテンプレート」を活用頂ければ、より効率的にアプリ開発・技術取得が期待できます(LPC8xxテンプレートはコチラを参照ください)。