LPCXpresso_7.5.0へ更新

10月29日、LPCXpressoが7.4.0からv7.5.0_254へUpdateされました。販売中のLPC8xxテンプレートLPC111xテンプレートともにこの最新版7.5.0での正常動作を確認しました。今回は、LPCXpressoのUpdate方法を説明します。

Update間隔

2014年のLPCXpressoのUpdateは、4月(7.2.0)→7月(7.3.0)→9月(7.4.0)→11月(7.5.0)など約2か月毎と結構頻繁にありました。時々、Welcome画面のLPCXpresso Downloadsリンクを開いて最新版を確認したほうが良いでしょう。私はあまり気にしませんが、意味不明なWarningなどが改善されることもあります。また、テンプレート使用中のLPCOpenライブラリ版数確認も下記リンクで可能です。

Welcome画面
Welcome画面

ちなみに、テンプレートのLPCOpenライブラリは、最新版の使用を確認しました。

Update方法

Update方法は下記です。ライセンスは、バブリックフォルダに保存されているので維持されます。

  1. 旧版を付属UninstallerまたはWindowsのプログラムと機能で削除
  2. 新版をインストール

新版は、旧版とは別フォルダへインストールされます。もし、この旧版インストールフォルダ内に手直ししたサンプルソフトなどを保存している場合には、削除前に別の場所へ保存する必要があります。

ライセンスは、パブリックフォルダ内のNXPLPCXpressoフォルダに記録されています。このフォルダは勝手に作成されますが、消去しないようにしてください。ライセンス保持のままUpdate完了すると、Welcome画面でfully activatedが確認できます。

ライセンス保持でUpdate完了の確認方法
ライセンス保持でUpdate完了の確認方法

IoT向けの無償ARMマイコンOS

弊社、販売中のLPC8xxテンプレートLPC111xテンプレートのライバルが、ARMから無償提供されます。ARM mbedの組込みOS「mbed OS」がそれです。

mbed OSとは

mbed OSに関する記事、「ARMがIoT向けにOSを無償提供開始」と、「ARMは「mbed」フラットフォームでIoT時代を実現させる」によると、ARM社が提供し(つまり、CMSISのOS版になるかも…)、

Cortex-M0/M0+向け、モジュラー構成で必要に応じて選択組込み可能、セキュリティ機能あり、イベントドリブン型OS、mbed Device Server(こちらは有償)との通信によりクラウドサービス利用可能、現在はα版で2015年10月に正式版の予定、NXP/freescaleなどのmbedベンダも参加、オープンソース開発、などなどIoTデバイス開発コスト低減化に効果あり。

かなり強力ライバルです(勝手にライバル視しましたが、ARM社様、ご容赦を…)。今後、ウオッチを続けたいと思います。

組込みマイコンのマルチタスク化

確かに組込みマイコンに多くの機能を実装する時、OSがあれば楽だと思うことがしばしばあります。Windowsデスクトップアプリ開発などを経験すると、より一層感じられることで、IoT時代のマイコンにはmbed OSなどの組込みOSが、必須プラットフォームになるでしょう。

ただ、OSを利用しようとすると、それなりの基礎知識が必要になります。有名な組込みマイコンOS:FreeRTOSなども、使い始めのステップが結構高く、大規模/多人数ソフト開発なら便利でしょうが、普段使いには躊躇します。

さらに、ベンダや機種毎に異なる基礎知識、商用Windowsの例では、OS更新時の手間など、実アプリ開発着手の前段階、メンテで労力を使い果たしてしまいます。これらに関しては、mbed OSで統一されれば、明るい見通しはあります。

マイコンテンプレートの市場

そんな背景で開発したのが、マイコンテンプレートです。簡易マルチタスク化、デバッグ容易、サンプルソフト流用得意、などの特徴があります。イメージ的には、以下の範囲での適用が市場です。

テンプレート市場と対応マイコン
テンプレート市場と対応マイコン

先の記事に、ARM mbedとIntel市場の違いをKris Flautner氏が説明されていましたが、(勝手に無断)引用させて頂くと「mbed OSは非常にハイエンドのモノで、それに対して弊社テンプレートがフォーカスするのは、無償IDEで開発できるプログラムサイズの低価格な組込みマイコンの市場。両者は全く異なる。」と言えます。

販売中のテンプレートの骨格説明と、一覧はコチラをご覧ください。

LPCXpresso_7.4.0リリースとデバッガ接続トラブル

9月16日、LPCXpressoの最新版LPCXpresso_7.4.0_229がリリースされました。販売中のLPC8xx、LPC111xテンプレートともに、最新版で動作確認完了しました。しかし、デバッガ接続時、注意することがあります。

デバッガ接続時のトラブル

デバッガ接続時、以下のエラーメッセージが表示されGDBへ接続できません。

デバッガ接続エラーメッセージ
デバッガ接続エラーメッセージ

これは、セキュリティソフトAvastが原因で、以下の方法で回避できます。

デバッガ接続トラブル回避方法
デバッガ接続トラブル回避方法

Avastの「常駐保護を無効にするに設定」(10分間~再起動まで停止は任意)すると、これまでの旧版LPCXpressoと同様デバッガに接続できます。Avastバージョンは、2014.9.0.2021です。

トラブル発生の開発環境は、Windows7 Ultimate 64/32ビット、Windows8 Pro 64ビットです。他のセキュリティソフトでも同様のトラブルが発生する可能性がありますので、ご注意下さい。これは、Avast側のバージョンアップで発生しなくなる可能性もあります。

セキュリティソフト、結構やっかいな相手です。

PS: Welcome画面、旧版LPCXpressoは、CloseしてもOKでしたが、新版はCloseするとIDEがダウンします。Welcomeは表示し続ける必要がありそうです。

NXP ARMコアマイコン利用メリット検証(その2)

ARMコアマイコン利用メリット検証の2回目は、テンプレート開発で気がついたCortex-M0+とM0の差分を示します。

GPIOセット/クリアレジスタの有無

32ビットマイコンのCortex-M0/M0+は、GPIOレジスタに対して、ビット単位のセット/クリア処理が必要です。レジスタのビット位置が、IOピンの操作に対応しており、ピン単位の入出力方向や初期値設定を行うからです。

後発のCortex-M0+のLPC820には、GPIOポートセットレジスタ:SET0、クリアレジスタ:CLR0、トグルレジスタ:NOT0が追加されました。これらは、先に開発されたCortex-M0のLPC1114にはありません。

LPC820GPIOのセット、クリア、トグルレジスタ
LPC820GPIOのセット、クリア、トグルレジスタ

これら追加レジスタを使うと、特定ビットを変更するビット演算時に、ソフト記述が簡単です。例を示します。

ARMマイコン Cortex-M0+ / LPC820 Cortex-M0 / LPC1114
ビット演算例 ビット演算1 ビット演算2
説明 ビットクリア、セットともにビット演算子「|=」を使う ビットクリア時は、演算子「&=~」、ビットセット時は、演算子「|=」を使う

 

このように、LPC820は、同じオペランド「|=」を使って、ビット単位のセット/クリア/トグルを表現できます。一方、LPC1114は、セット時は「|=」、クリア時は、「&=~」を使い分ける必要があります。

これらレジスタは、Cortex-M0+の特徴の1つ、「Single-cycle fast I/O access port」の実現手段かもしれませんが、ここでは、ソフト記述の容易さに着目して差分を説明しました。

I2C APIの差

これは、前回記事に記載したように、LPCOpen版数の差に起因していると思いますので、簡単に現状での差分を示します。

ARMマイコン Cortex-M0+ / LPC820 Cortex-M0 / LPC1114
I2C APIマスタライト例  マスタタイト1  マスタタイト2

 

主観評価

販売中のテンプレートで使った差分を示しました。これ以外はそのまま使えるので、差分がデメリットになるほど労力がいらないこと、後発マイコンCortex-M0+には、ソフト記述が容易になるようなレジスタが追加されたことがお判りになったと思います。

つまり、GPIOの場合、Cortex-M0からM0+への移植:ポーティングは、LPC1114でポート番号が0~3あったものが、LPC820では0のみになったことに注意すれば、殆どそのまま使えます。但し、新たに追加されたGPIOセット/クリア/トグルレジスタを活用すれば、より簡単にソフトが記述できます。LPC8xxテンプレートも、これらレジスタを活用しています。

新しいCortex-M0+マイコンほど、よりソフト開発が容易なっていると言えるでしょう。

NXP ARMコアマイコン利用メリット検証(その1)

ARM Cortex-M0搭載のLPC111xテンプレート発売で、同一ベンダNXPでのARMコアCortex-M0+からCortex-M0へのテンプレート移植が完了しました。そこで、NXP ARMコアマイコン利用のメリット/デメリットについて、数回に分けて示します。

NXP Cortex-M0+マイコンのテンプレート移植

NXP Cortex-M0+マイコンからCortex-M0マイコンへの移植
NXP Cortex-M0+マイコンからCortex-M0マイコンへの移植

同一ベンダのCortex-M0/M0+ソフトの差

一言で言うと、NXP Cortex-M0/M0+のソフト差は、殆どありません。ルネサスのRL78/G13(S2コア)とRL78/G14(S3コア)と同じ程度と言えば、RL78/G1xユーザには判っていただけるでしょう。

差がある箇所(概要)

アナログ入力は、コンパレータとADCで内蔵周辺回路が異なるため、制御ソフトは異なります。

一方、内蔵周辺回路名が同じでも、後発のLPC820では異なるものがあります。LPC820のGPIOクリアレジスタがそれで、LPC1114にはありません。これは、ソフト記述がより簡単になるように専用レジスタが追加されたと推測します。

また、テンプレートではLPCOpenライブラリの版数が異なるため、I2C関連のAPIも異なります。これは、版数が同じになれば、同一APIになると思います。敢えて、異なるAPIにする意味はないためです。対策に変換関数を自作すれば済むことですが、一方に合わせずに素のAPIをそれぞれのテンプレートに使いました。

これら差分箇所は、次回以降、詳細に示していきます。

一致する箇所

マイコンコア制御、つまりCMSISライブラリに相当する部分については、APIレベルで一致します。従って、Cortex-M0+とCortex-M0のARMコア差はソフトでは見えなくなります。

主観評価

半導体は、ムーアの法則にしたがって、微細加工とハード集積化が進みます。マイコン半導体ベンダは、市場が、動作電圧や、周辺回路などのハード互換性要求が強いため、これまではこのムーア則を、主としてハード低価格化、利益増加へ使っていたと思います。

しかし、徐々にソフト開発の要求も、この法則へ適用しつつある気がします。例えば、LPC820のGPIOクリアレジスタ追加や、ROMライブラリ追加などがそれです。これらハード追加により、従来ソフトがそのままでは使えませんが、同じ機能を、より高速、かつ簡単なソフト記述でできます。

ARM Cortex-M0+のLPC8xxシリーズは、Cortex-M0のLPC111xシリーズよりも後発であるため、これらの恩恵を受けて、より効率的なソフト開発ができます。また、従来Cortex-M0ソフト資産を活かしてM0+へ移植する際も、少ない手間でポーティングできるでしょう。

ARMコア利用メリットは、後発ハードの性能向上、既存ソフト資産の継承のし易さ、これら両者がもたらす「確実な処理能力の向上」にあると思います。機種が異なるマイコンへのソフト移植は、処理能力が本当に向上するか否かは、実際に開発完了するまでは「賭けの要素」もありました。

しかし、少なくともARMコアを使う限り、この「掛けのリスク」がかなり減るということを、今回のテンプレート移植は、M0+からM0という時間を逆に遡る方向でしたが、実感しました。

 

本記事は、同一ベンダNXPのARMコア利用のメリットを概観しました。デメリットに相当する差分の詳細は、次回以降に示します。また、別ベンダで同一ARMコアのテンプレート移植例として、freescaleのKinetis Eシリーズ/Cortex-M0+で評価します。

LPC111xテンプレート発売

ARM Cortex-M0 LPC111xテンプレート発売開始

Cortex-M0搭載のLPC111xテンプレート(LPCOpenライブラリ版)を¥1000(税込)で販売します。テンプレート概要と仕様は下記です。

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

テンプレートは、LED出力とSW入力のみを組込んだ「シンプルテンプレート」と、組込み必要機能をほぼ全て盛込んだ「メニュードリブンテンプレート」の2つセットで、もくじ内容の説明資料添付で¥1000です。

購入ご希望の方は、メール(宛先:info@happytech.jp)にてお知らせください。銀行振込口座を返信いたしますので、税込代金¥1000円を振込でください。入金確認後、全説明ページとテンプレートプロジェクトをメールにてお送りします。後は、ご自由にテンプレートへ変更や修正を加えて頂いて、LPC111xx習得や、本来のアプリ開発に役立てて頂ければ幸いです。

「シンプルテンプレート」は、LPCXpressoプロジェクトファイルで、LED出力とSW入力のみの機能をプログラム済みです。

「メニュードリブンテンプレート」は、シンプルテンプレートにADC、I2C EEPROM、LCD、UARTなどの組込みマイコンに必要な機能をほぼ全て実装したテンプレートです。

どちらのテンプレートもLPCXpressoLPC1114評価ボード(NXP製)mbed-Xpresso BaseBoard(NGX Technologies製)を接続し、動作確認済みです。PC接続のメニュードリブン方式のため、関数単位で移植性が高いソフトです(もくじP1動作中の写真、P5ファイル一覧、P11ハードウエア構成などを参照)。

テンプレートは、NXP/ARM社提供の最新版LPCOpenライブラリ(v2.00a)を使っています。LPC111xは、上記の他に、従来版ライブラリもありますが、本テンプレートは使っていません(もくじP7に詳細記載)。

Cortex M0マイコンのLPC1114は、8/16ビットマイコンの置換えを狙った、従来品より高性能な割込み専用回路や低消費電力、低価格が売りの、世界定番ARM32ビットマイコンです。本テンプレートと確実に動作する市販評価ボードを使えば、LPC111x習得、早期アプリ開発や評価に最適な環境が得られます。

このテンプレート対象者は、初級~中級のソフト開発者です。上級者は、これに似たテンプレートを既に持っているからです。本来は、上級者がテクニックを含む自分のテンプレートを初級~中級者へ教え、教えられた側でさらに、テンプレートに修正を加えれば、技術継承も容易です。しかし、この継承は、習得済みの者にとっては、オーバーヘッドで、未習得の者にとっては、理解困難な面が多いものです。

販売テンプレートには、詳細なもくじ資料が付いていますので、だれにでもその内容が理解できます。また、テンプレートソースには、「判りにくい英語ではなく、日本語コメント」を豊富につけていますので可読性も高いと思います。

販売テンプレート一覧

このテンプレートを含めて、3種テンプレートが各1000円(税込)販売中で、本年末にさらに1種追加予定です。

テンプレート名 対象マイコン(ベンダ) 動作ハード 備考 ブログ検索タグ 最新版リリース日
LPC111xテンプレート(Cortex-M0 LPC1114/1115 (NXP) LPCXpressoLPC1114+BaseBoard LPCOpenライブラリ使用 LPC1114 2014/09/06
LPC8xxテンプレート(Cortex-M0+ LPC8xx (NXP) LPCXpressoLPC820+BaseBoard LPCOpenライブラリ+ROMライブラリ版 LPC820 2014/05/18
RL78/G1xテンプレートV2(RL78-S2/S3コア) RL78/G13、G14 (Runesas) ・BB-RL78G13-64(V2で追加)
・G13スタータキット
・G14スタータキット
・QB-R5F100LE-TB
・QB-R5F104LE-TB
(+ブレッドボード)
CubeSuite+のコード生成API利用。BB-RL78G13-64以外は、ブレッドボード上にマイコン周辺回路製作要。 RL78/G13
RL78/G14
2014/10/10
Kinetis Eテンプレート(Cortex-M0+ Kinetis E/40MHz (freescale) FRDM-KE02Z40M+BaseBoard 【開発中】 Kinetis E 2014/12E予定

※ARM Cortex-M0/M0+マイコンの周辺回路は、BaseBoard実装済み回路を使います。
※RL78/G1xテンプレートは、周辺回路実装済みのBB-RL78G13-64(NGX Technologies製)で改版、改良を行う予定です。

本ブログは、これらのテンプレート情報や、開発Tipsなどを混載していますが、各記事にはブログ検索タグを付けています。このタグ、またはテンプレートでブログ右上のSearch:検索を実行して頂くと、タグ別表記になります。テンプレート毎の詳細記事や記載内容を個別にご覧頂く際に便利です。

テンプレートご購入者様の特典

既にテンプレートをご購入された顧客の皆様への特典として、新たに別テンプレート購入の際には、半額(500円、税込)にディスカウント致します。是非、新しいテンプレートを活用して、別マイコン開発へ挑戦して頂く際にご利用下さい。

また、ご購入頂いたテンプレートに関するご意見、ご希望なども、テンプレート改版や新テンプレート選定などへ反映させて頂きますので、既にお知らせした宛先までお寄せ下さい。

マイコンテンプレートの骨格

Wordには、名刺、カレンダー、パンフレットなどアプリ毎のテンプレートが用意されています。マイコンテンプレート開発時に悩むのが、どのようなアプリを意識してテンプレートを作るかです。できるだけオールマイティなテンプレートが目標です。

今回は、弊社マイコンテンプレートの骨格について説明します。

テンプレートの骨格

弊社マイコンテンプレートは、

(1)無償IDEのプログラムサイズ

(2)時分割の処理起動

(3)RAMでの関数間パラメタ渡し

(4)UARTメニュードリブン

の4つの骨格を持ちます。

(1)無償IDEのプログラムサイズ:弊社テンプレートは、IDE無償版で開発できるプログラムサイズを対象とします。これは、この程度が個人や少人数で開発/デバッグできる限界と考えるからです。これ以上大きくなると、開発/デバッグが指数的に困難となり、開発を収束させるために、例えばリアルタイムOSなどの別手段が必要になります。

最近は、無償版でも256KB程度の十分大きなサイズも開発できるようになりました。これは、IDEツールが高機能になり、API関数の自動生成や、既存ライブラリを簡単に使えるためです。これらIDE生成関数は、バグなしの完成品ですが、個人でカスタムメイドできるサイズは、今も昔もあまり変わらないと思います。経験的に無償IDEで開発できるサイズがこの上限サイズです。

(2)時分割の処理起動:マイコンは、CPUと周辺回路が「ハード的に並列動作」します。従ってCPUソフトを、周辺回路起動と処理完了確認の2つで関数化すると、複数の周辺回路を簡単に並列動作させることができます。起動から処理完了までの処理時間は、周辺回路毎に予想できますので、その間に別処理、例えばSleepをすれば電力効率もアップします。これらの処理を時分割で起動するのが弊社テンプレートです。

(3)RAMでの関数間パラメタ渡し:カスタムメイド関数のパラメタは、内蔵RAMを使って外部と入出力します。これで関数単体デバッグが簡単になります。RAM値をデバッガで確認/修正すれば、関数動作が把握できるからです。さらに、関数の中身が未完成の時でも、入出力値をRAMに設定しさえすれば、結合デバッグができるメリットもあります。

(4)UARTメニュードリブン:シリアルポートUARTを持たないマイコンはありません。Wi-FiやBluetoothモジュールをこのUARTへ接続すれば、ワイヤレス制御もできます。シリアル-USB変換ケーブルでマイコンとPCを接続し、メニュー形式で処理を選択するメニュードリブンをテンプレートに採用する理由は、2つあります。1つが、この「UARTが必ずあり、応用範囲が広い点」です。

もう1つが、メニュードリブンで開発すると「処理の移植が容易な点」です。テンプレート利用者は、メニューで示された処理のうち、必要な処理のみを簡単にテンプレートソースから見つけることができます。所望処理がUART受信コマンド解析関数から始まるからです。

そして、発見した関数(または関連関数)を、丸ごとご自身のソースへコピーすれば、動作させることができます。テンプレートは、多くの場合、この処理単位でファイル化していますので、ファイルを丸ごとコピーしさえすれば、必要な処理をテンプレートから抜き出すことも可能です。

評価ボードで実動作確認

入手性が良く低価格な評価ボードで、これらの骨格をもつテンプレートをボードへ実装し、動作確認を行い、詳細な説明資料付きで販売します。説明資料付きのテンプレートと評価ボードの組合せは、効率的に対象マイコンを習得でき、新規アプリ開発と評価に役立ちます。

販売テンプレートと開発テンプレート

現在、2種のテンプレートを販売中で、2種を年末までに開発、発売予定です。開発経過などを本ブログに記載しますので、ご参照ください。価格は、各1000円(税込)/1コピーです。

テンプレート名 ベンダ マイコン 動作確認評価ボード
RL78/G1xテンプレート Ver3 ルネサス RL78/G1x
(32MHz)
・RL78/G13 Stick
・RL78/G14 Stick
・QB-R5F100LE-TB
・QB-R5F104LE-TB
BB-RL78G13-64 (弊社推薦ボード)
LPC8xxテンプレート NXP LPC81x
Cortex-M0+
(30MHz)
・LPCXpresso LPC812  +  mX-BaseBoard
LPC1114テンプレート NXP LPC1114/5
Cortex-M0
(50MHz)
・LPCXpresso LPC1114  +  mX-BaseBoard
Kinetis/Eテンプレート(開発中) freescale Kinetis Eシリーズ
Cortex-M0+
(40MHz)
・FRDM-KE02Z40M  +  mX-BaseBoard

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テンプレートはコチラを参照ください)。

LPC81xのLPCOpenと従来ライブラリの使い易さ比較

LPC81xソフト開発時に利用するLPC81xライブラリで、ソース記述がどのように変わるかを示します。

利用ライブラリ選定

LPCXpressoは、新プロジェクト作成時、プロジェクトウイザードで2つのライブラリ、LPCOpenまたはLPCClose:従来ライブラリのどちらかを選定する必要があります(各ライブラリは、コチラを参照)。

LPCOpenまたはLPCClose選択
LPCOpenまたはLPCClose選択

その結果、プロジェクトに追加されるライブラリファイルとその制御対象が下表です。LPC81xには、これら選定ライブラリの他にROMライブラリもあります(LPCOpenとROMライブラリが、それぞれ機能補完していることは、コチラを参照)。

選定ライブラリ コア制御 周辺回路制御
LPCOpen lpc_chip_81x_lib nxp_lpcxpresso_812_board_lib
LPCClose CMSIS_CORE_LPC81x lpc800_driver_lib

 

ライブラリの使用宣言

ライブラリ選定後、プログラムソース記述時は、#include “ライブラリヘッダファイル”で使用宣言が必要です。LPCOpen選定の場合は、#include “board.h”のみで、コア制御と全ての周回路制御、さらにROMライブラリも「同時」に使えます。

一方、LPCCloseの場合は、コア制御に#include ” LPC8xx.h “、周辺回路は、制御対象に応じて#include “lpc8xx_制御対象.h”の宣言が「個別」に必要です。また、ROMライブラリ利用の場合は、ROMテーブルやROMライブラリ物理位置の宣言などを「別途追加」する必要があります(詳しくは、LPCユーザマニュアルUM10601のLPC81x Boot ROMセクション参照)。

ROMライブラリ追加宣言(一部抜粋)
ROMライブラリ追加宣言(一部抜粋)

使い易さ比較

つまり、LPCOpenなら#include “board.h”のみ、LPCCloseなら#include ” LPC8xx.h”の他に#include “lpc8xx_gpio.h”、#include “lpc8xx_mrt.h”・・・や、ROMライブラリ追加宣言などのインクルードが、肝心の「ソース記述前」に必要となります。

LPCOpenのboard.hを診てみると、色々なヘッダファイルが、孫引きでインクルードされるのが判ります。プログラミングでは、LPCOpenライブラリ利用の方が、記述が簡単です。結果としてバグ減少が期待できます。LPC8xxテンプレートに関して、LPCOpen版が先に販売開始され、LPCClose版が後になっているのは、この理由もあります。

LPC8xxテンプレートLPCClose版の対策

開発中のLPC8xxテンプレートLPCClose版は、煩雑な記述を避けるため、LPCOpen版と同様、1つのヘッダファイルインクルード追記でLPCCloseライブラリが利用できるように工夫します。

LPCXpresso_7.2.0_153リリース

2014年5月20日、最新版LPCXpresso_7.2.0_153がリリースされました。販売中のLPC8xxテンプレートもこの最新版で動作確認済みです。

新旧LPCXpresso比較

このLPCXpresso_7.2.0_153では、新規プロジェクトをウイザードで作成した時に、メイン関数を生成するファイル名が、これまでのmain.cからproject.cへ変更になりました。例を示します。

SimpleTemplateプロジェクトを新規作成の場合 main()の場所
旧LPCXpresso生成ファイル main.cファイル内にmain()あり
LPCXpresso_7.2.0_153生成ファイル SimpleTemplate.cファイル内にmain()あり
新旧LPCXpressoの比較
新旧LPCXpressoの比較

但し、旧LPCXpressoで作成済みプロジェクトを、main.cファイル名のまま最新版でコンパイルしても問題なく動作します。そのため、旧版で作成した販売中テンプレートは、SimpleTemplateもMenuDrivenTemplateも「main.cのまま」にします。

これには、ユーザ追加ファイル名をPascal形式記述にすると、LPCXpresso生成ファイルは全て小文字表記となり、「一目で、LPCXpresso作成したのか自作かを見分けられる」というメリットもあります。左:旧LPCPressoの場合で説明すると、”Launcher.c”、”Led.c”、”Sw.c”、”Userdefine.h”がユーザ追加ファイル、それ以外が自動生成ファイルということが一目で判ります。