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

マイコンテンプレートを使ったアプリケーションの開発方法(後半)は、手順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タイミングで、タクトスイッチ入力処理を行っています。

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