LPCXpresso v7.9.2とLPCOpen v2.19リリース

2015/09/14、LPCXpresso v7.9.2がリリースされました。

この新LPCXpressoのデフォルトインストール先、C:\nxp\LPCXpresso_7.9.2_493\lpcxpresso\Examples\LPCOpen
にLPCOpenの新バージョンv2.19 2015/09/01も同時にインストールされます。

残念ながらこのLPCOpen v2.19も、前版v2.15積み残しのGPIO_APIバグ、uinit8_tを修正してunit32_tを使うが解決されていません。従って、LPC824テンプレートも“開発待ち”を続けます。

NXPのFreescale買収は、2015年末完了予定で進行中です。マイコン部門のみを比較すると、NXPよりもFreescaleの方が大きいそうで、今回の積み残しはこれが反映されたのかもしれません。LPCXpressoとLPCOpenの組合せは、他社と比較しても使いやすいIDEなだけに残念です。

一方、FreescaleのKinetis Design Studio 3.0.0 IDEもEclipseのUpdateはありますが、メジャーバージョンアップはありません。

NXP、Freescaleともに2015年末に向けて忙しいのでしょう。両社のARM Cortex-M0+/M0マイコン状況は、様子がはっきりするまで待ったほうが良い、というのが現段階の判断です。そこで、先に取上げた、Cypress PSoC 4/PRoCの調査を次回報告する予定です。

ブログカテゴリ修正

マイコンのサブカテゴリを、6種のマイコンとIoT向けPCに修正しました。

ARM Cortex-M0+またはM0コアのマイコン、FreescaleのKinetisマイコン、NXPのLPCマイコン、ルネサスのRL78マイコンとR8Cマイコンです。
IoT向けのPCは、Windows 10 IoTコアを実装できるCPUボードを対象としました。

KinetisとLPCマイコンは、Cortex-M0+/M0マイコンと重複しています。
これは、Cortex-M0+/M0を重視したためで、このカテゴリから、今後新しいマイコンが発売されることを想定しています。

この基になった記事がコチラです。「Cortex-Mプロセッサを軸にしたARMのIoT戦略」の項で、市場早期対応にARMコア利用が優れていること、小さな実装面積と少ない電力要求のIoT市場にはCortex-M系が良く、Bluetoothなどの無線IPをSoC実装した新マイコン発表の可能性を示しています。

正式版がリリースされた無償Windows 10 IoTコアは、Wi-FiとBluetoothサポートなので、この新マイコンとの相性も良さそうです。

ブログ記事検索は、キーワード短縮表記をお使いください

カテゴリ修正に合わせて、過去の記事のタグ追加と修正も試みましたが、記事数が多いので断念しました。従って、記事の検索にタグを使うと、検索漏れが生じます。

ブログ記事のタグ検索
ブログ記事のタグ検索

対策として、関連記事の検索は、「検索窓にキーワードの短縮表記」をお使いください。例えば、LPC812とLPC824の記事を検索するときは、“LPC8” を入力するなどです。タグ検索よりは遅いのですが、検索漏れは防げます。よろしくお願いいたします。

ブログ記事のキーワード検索
ブログ記事のキーワード検索

NXPのFreescale買収、株主承認取得

NXPによるFreescaleの買収に進展があり、7月2日株主承認が得られました。後は、規制当局の承認を得て、予定通り今年の終わりまでに完了するようです。

気になる両社のCortex-M0/M0+マイコンの今後については、未だ不明確です。
個人的には、統合開発環境IDEは、NXPのLPCXpresso、Rapid Application Development : RADツールは、FreescaleのProcessor Expertが好みなので、折衷的なIDEができると嬉しいです。両社同じEclipseベースIDEですが、異なります。

ルネサスの新マイコン:Renesas Synergy MCUも、EclipseベースIDE(E2Studio?)でARM Cortex-M0+/M3/M4コアと予想しています。この新マイコンの詳細発表は2015年4Qで、NXP買収完了とほぼ同じタイミングです。

Kinetis Design Studio V3.0.0リリース

FreescaleのKinetisマイコン無償開発環境KDSの新バージョンV3.0.0が2015年5月5日リリースされました。関連資料から、特徴を探ります。

ポーティングガイトが詳しくなった

以前は、Code Warriorからの移行ガイドのみでしたが、これに旧KDSからの移行も加わりました。つまり、KDS V3.0.0で旧版プロジェクトを変更すると、変更後は、旧版では、Openできないということです。KDS V2.0.0を継続して使われる方は、注意が必要です。

Processor Expert V3.0.0へ更新

旧PEで、TSS_LibraryがFRDM-KE02Z40評価ボードで正常動作しない不具合が解消されたかは、後日報告します。

Kinetis SDK v1.2.0でサポート評価ボードが増えた

KSDK v1.2.0サポートボード一覧
KSDK v1.2.0サポートボード一覧

残念ながら、Kinetisテンプレートで使用したKシリーズマイコンのFRDM-KE02Z40Mボードは、V3.0.0でもSDKサポートはありません。SDKメリットは、ボード動作確認済みのサンプルソフトが、Freescaleから提供されることです。
次期Kinetisテンプレート候補のLシリーズは、多くの低価格評価ボード(FRDM-KLxxx)がサポートされていますので、この中らか対象マイコンと評価ボードを選定する予定です。

以上、KDSV3.0.0リリースの速報でした。

LPC824のSWM設定手順

SWM:スイッチ マトリクスは、LPC8xxに特徴的な機能です。
このSWMを上手く使うこと、これがLPC8xx使いこなしポイントです。パッケージの物理ピン数が少なくても、多くの周辺回路の入出力を割付けることができ、また、その自由度が高いことが普通のマイコンとの一番の違いです。

このSWM設定手順を、LPC824を例に、解説します。LPC812は、以前の記事を参照してください。

周辺回路とパッケージ物理ピンを割付けるSWM

デフォルトピン、固定ピン、可動ピン

パッケージ物理ピンにSWMで設定可能なピンは、デフォルトピン、固定ピン、可動ピンがあります。

固定ピン一覧:Fixed Pins List

SWM Fixed Pins List(swm_8xx.hより抜粋)
SWM Fixed Pins List(swm_8xx.hより抜粋)

RESETなどの専用ピンの物理ピン位置は、SWMでも変更できません。これら専用ピンは、「固定ピン」と呼ばれ「SWM_FIXED_機能」で示されます。例えば、SWM_FIXED_ADC1は、ADCチャネル1の固定ピンで、LPCXpresso824-MAX評価ボードならば、#23:PIO0_6ピンです。

#23ピンは、データシートでは“PIO0_6/ADC_1/VDDCMP”の名称がついています。PIO0_6は、GPIOを示します。全てのGPIOは、デフォルトで「入力方向の固定ピン」です。SWMでこれらGPIOの有効/無効が設定でき、デフォルトでは、「全て有効」になっています。

つまり、#23ピン:“PIO0_6/ADC_1/VDDCMP”に対してデフォルト時は、GPIO入力のPIO0_6として機能します。このピンをADC1として使うには、SWM_FIXED_ADC1固定ピンの有効化処理が必要です。

デフォルトピン一覧:LPC824M201JHI33

LPCXpresso824-MAX評価ボード実装パッケージ:LPC824M201JHI33の、デフォルトピン割付けが下記です。

LPC824M201JHI33パッケージデフォルトピン割付け
LPC824M201JHI33のデフォルトピン割付け(SWMツールより抜粋)

可動ピン一覧:Movable Pins List

SWM Movable Pins List(swm_8xx.hより抜粋)
SWM Movable Pins List(swm_8xx.hより抜粋)

USART、SPI、 SCT、I2Cなどの通信機能やアナログコンパレータ出力などは、パッケージの物理ピン割付けをSWMで設定します。これらは、「可動ピン」と呼ばれ、「SWM_機能」で示されます。これら可動ピンは、割付ける固定ピン機能が無効になっている場合にのみ、そこへ可動ピンを割り当てることができます。

可動ピン種類が多く、割当て可能なピン位置も多いので、パッケージの少ないピンを状況に応じて有効に活用できます。

LPC824使用ピン設定手順

以上から、LPC824のピン設定手順は下記になります。

LPC824ピン設定手順
LPC824ピン設定手順

LPCXpresso824-MAX評価ボード実例

評価ボード実装済みの3色LEDに対してGPIO出力へ設定した例です。Chip_XYZ()は、LPCOpenライブラリ提供のAPIです。

ボード実装済みLEDのGPIO出力設定
ボード実装済みLEDのGPIO出力設定(board.cより抜粋)

可動ピン:UART1のTXD_OとRDX_Iを、P0_7とP0_18へ設定した例です。UART1は、評価ボードUSB経由のVirtual COMとして機能します。

可動ピン:UART1機能の設定
可動ピン:UART1機能の設定(board.cより抜粋)

WebベースのSWMツール

パッケージピンと周辺回路の接続をGUIで設定し、これ対応のSWMソースコードを出力するWebツールがあります。前述のピン設定手順は、ピン毎に設定が必要ですが、一括でSWMを設定するソースが生成されます。

割付け済み機能のみが、GUIパッケージピンに表示されるので重宝します。ピンリストなども出力可能です。

※個人的には、このツールと逆方向、つまり、ソフト設定に応じたパッケージ割付けを自動出力する検証ツールがあればと思いますが…。

Web SWMツールのGUI設定とソース出力例
Web SWMツールのGUI設定とソース出力例

LPC8xxテンプレートの対応

SWM出力ソースは、一括設定のため可読性が低くなります。弊社LPC8xxテンプレートは、LED出力やSW入力などの機能毎にソース分けて作成し、必要に応じて組合せて使います。そこで、このツールは使わずに、LPCXpresso824-MAX実例と同様、それぞれのソースで「必要ピン設定のみを行う」方法を採用しています。

* * *

LPC824対応のLPC8xxテンプレートは、2015年4Eを目標に開発してまいりました。しかし、LPCOpenライブラリv2.15、2015/01/08のGPIOのAPIに不具合がありますので、テンプレート開発を「一時停止」し、ライブラリ不具合の改版後に再開いたします。
LPC824対応テンプレートのリリース時期などは、今後掲載予定です。

IoTマイコンLPC824の5動作モード

IoT向き省電力マイコンNXP LPC824の動作モードを、消費電力の高い順に表にしました。

LPC824 Operation Mode List

LPC824 Operation Mode List
LPC824 Operation Mode List

出典は、ユーザマニュアル6章 電力管理のTable 59と64です。このTableは、詳細ですが解りにくいので、モード一覧表を作成しました。この表で概要を掴んだ後なら、Table59/64の理解が進むと思います。

※Runへの復帰時間は、ユーザマニュアル2014/09/18とデータシート2014/10/01、Cortex-M0+ Technical Reference Manualを参照しましたが不明でした。但し、不明でも問題はないと思います(後述)。

LPC824動作モード解説

LPC824動作モードは、Runを含めて5モードあります。

基本3モード:Run/Sleep/Power-down

「Run」と、MCUを停止し全周辺回路の動作/停止が設定可能な「Sleep」、全動作停止の「Power-down」、これら3モードは、LPC824に限らず全マイコンに共通の動作モードです。

低消費電力でマイコンを動作させる場合は、最も消費電力が大きいMCUを止め、必要な周辺回路のみを動作させるSleepを使います。そして、動作中周辺回路からの割込みによりSleepからRunへ復帰します。IRCは、動作させたままですので、SleepからRunへの復帰は非常に短時間で、通常は、問題にする必要はありません

省電力2モード:Deep-sleep/Deep power-down

ソフトで動作/停止を設定できるUSART、SPI、I2Cの通信系とWWDT:ウオッチドックタイマ、WKT:ウエイクアップタイマ、BOD:ブラウンアウトディテクト以外の周辺回路を停止するのがLPC824の「Deep-sleep」です。

Deep-sleepとPower-downの差は、IRCを止めるか否かです。このため、Deep-sleepの方が、Power-downよりも早くRunへ復帰できます。この復帰時間も今ところ不明ですが、Sleepと同様ですので、問題なしと思います。

これに対し、Power-downは、IRCも停止するのでRunへの復帰には、時間がかかります。

動作/停止を設定できるWKT以外は全てを停止するのが「Deep power-down」です。このDeep power-downが、消費電力最低のモードです。

Power-downとDeep power-downともに、バッテリ寿命が尽きて供給電圧が低下した場合などに使用するモードだと推測しました。

この状態からの復帰には、MCUリセットが必ずある通常起動手順か、または、この両モードで動作中ならば、割込みでRunへ復帰する2通りの方法があります。
割込み復帰の場合は、メモリに動作時のデータが残っており、これが活用できる可能性があります。MCUリセットでRunへ復帰する場合は、メモリも初期化されるので、ここが違います。

もちろん、バッテリを充電するなどの正常動作ができる環境を整えた後に、上記復帰手順の実施が必要です。結局、Power-downやDeep power-downは、メモリ初期化をスルーするために使うと考えて良いと思います。このため、復帰時間は、問題になりません。

* * *

LPC824の5動作モードを解説しました。LPC824は、クロックソースが、IRCか外部発振器/クロックのため、比較的シンプルです。また、復帰時間の絶対値は気になりますが、問題にする必要は無さそうです。マニュアル記載がないのは、このためと推測します。

LPC824のDeep-sleepは、新しい動作モードというよりも、USARTなどの特定周辺回路のみを動作/停止設定可能としたSleepの派生モードです。使い方も通常のSleepと同じです。または、復帰時間を気にする必要のないPower-downの派生モードと考えても良いでしょう。従って、省電力動作の理解やプログラミングには解りやすいマイコンと言えます。

LPC824と同じARM Cortex-M0+コアを持つFreescale Kinetis Lシリーズは、11モードもあります。ルネサス RL78/I1Dも5モードですが、クロックソースが高速/低速の系統があり、復帰時間への配慮が必要です。これらマイコンの動作モードについては、別機会に解説する予定です。

LPCXpressoにTerminate, Build and Debugボタン追加

Terminate, Build and Debug Button
Terminate, Build and Debug Button

LPCXpressoが7.7.2 (build 379)に更新され、Terminate, Build and Debugボタンが新たに追加されました。

デバッグ中にソース修正を加えた場合、一旦デバッガ接続を切り離した:Terminateボタン後、Buildボタン→Debugボタンを押していた従来方法が、このボタン1個でできるように改善されました。

CypressとSpansion合併

2015年3月15日、Spansionは、Cypressと合併しました。

ARMコアでプログラマブルなアナログ周辺回路が特徴のCypressと、自動車/産業機器に強いシェアをもつSpansion、「新生Cypressは、車載、産業機器、民生機器、ウェアラブル端末、IoTなどの世界市場でシェアを拡大すべく、組み込みプロセッサやメモリの製品ポートフォリオの拡充を図っていく」とのことです。

ARMマイコン業界も数年前の自動車業界と同様、会社規模の集約化が進んでいくのでしょうか?  NXPとFreescale合併後、ARM Cortex-M0/M0+の製品ポートフォリオの変化の有無が気になる今日この頃です。

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

マイコンテンプレートを使ったアプリケーションの開発方法(後半)は、手順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倍の余裕がマイコン設計には必要と思います。