テンプレート移植(Cortex-M0+ → M0編)

ARM Cortex-M0+のLPC8xxテンプレートをCortex-M0テンプレートへ移植するに際し、使用評価ボードを比較し、既存テンプレートのどこに変更が必要かを把握します。

評価ボード比較

評価ボード LPCXpresso LPC820 REV A LPCXpresso LPC1114 REV A
ボード写真(LPC-Link部除く)

LPCXpresso LPC820
LPCXpresso LPC820

LPCXpresso LPC1114
LPCXpresso LPC1114
実装マイコン LPC820
LPC812M101JDH20 TSSOP20
LPC1114 LPC1100L(第2世代)シリーズ
LPC1114FBD48/302 LQFP48
CPUコア ARM Cortex-M0+ 30MHz(max) ARM Cortex-M0 50MHz(max)
動作電圧 1.8~3.6V 1.8~3.6V
実装水晶発振子 12MHz 12MHz
内蔵発信器 12MHz 12MHz
内蔵フラッシュ・メモリ 16KB 32KB
内蔵RAM 4KB 8KB
内蔵EEPROM なし なし
GPIO 18本(5V-tolerant I/O)
GPIO0_0~GPIO0_17
42本(5V-tolerant I/O)
GPIO0_0~GPIO0_11
GPIO1_0~GPIO1_11
GPIO2_0~GPIO2_11
GPIO3_0~GPIO3_5
アナログ入力 アナログ・コンパレータ
5ビット×1チャネル
ADC
10ビットx8チャネル
汎用タイマ 16/32ビット・タイマ(SCT)×1 16ビット・タイマ(CT16Bx)×2
32ビットタイマ(CT32Bx)×2
実装LED 3色(RED:P0_15、GRN:P0_17、BLU:P0_16) 1色(RED:P0_7)
シリアル通信 USART×1チャネル USART×1チャネル
SPI クロック同期式×1チャネル クロック同期式×1チャネル
I2C フルスペック×1チャネル フルスペック×1チャネル
消費電流
(マイコン単体)
通常時(3.3V/30MHz):3.3mA
スリープ・モード:1.8mA
ディープ・スリープ:150μA
パワーダウン・モード:0.9μA
ディープ・パワーダウン:170nA
通常時(3.3V/50MHz):7mA
スリープ・モード:5mA
ディープ・スリープ:2mA
パワーダウン・モード:なし
ディープ・パワーダウン:220nA
デバッグ機能 SWD SWD
スイッチ・マトリクス あり なし
USB なし なし

LPC820評価ボードのCortex-M0+は、Cortex-M0をさらに小型、省電力するための見直しが行われた結果、M0に比べ消費電流の少なさが際立ちます。

一方、Cortex-M0のLPC111xも、低消費電力とフラッシュ大容化の方向に進化中で、比較マイコンは、第2世代LPC1100Lシリーズです。トラ技2012年10月号掲載のLPC1114は、一つ前の第1世代でした。LPC111xには、第3世代LPC1100XLシリーズやフラッシュを64KBに増加したLPC1115などのバリエーションがあります。

しかし、このシリーズの基本は、第2世代のLPC1114 LQFP48で、シリーズ最大IOピン数の48で関連情報も多く、LPCOpenライブラリもありますので、Cortex-M0テンプレートの評価ボードは第2世代LPC1114を選びました。

なお、この評価ボードの代わりに、回路図が同じLPCXpresso LPC1115を使うこともできます。この場合の注意事項はコチラを参照して下さい。

テンプレート変更項目

テンプレートのライブラリは、LPCOpen最新版V2.xxを使用しますので、Cortex-M0+とM0のARMコア差はライブラリが収集してくれるハズです。つまり、APIがそのまま使えます。すると、テンプレート移植で変更が必要な個所は、ボード比較から差がある個所で、以下となります。

項目 変更内容
CPUコア動作周波数 30MHz動作を50MHz動作へ変更
GPIO GPIOポート番号0が0~3へ増加
アナログ入力 アナログ・コンパレータからADCへ変更
タイマ SysTickTimerは、同じものを使用するので変更なし
評価ボード実装LED 3個LED出力を1個出力へ変更
評価ボードとBaseBoardの接続 BaseBoard実装SWやその他信号線の割付変更

LPC8xxテンプレートで使ったBaseBoardは、LPC111xテンプレートでも使います。従って、BaseBoardのUART入出力、アナログ入力、LCD出力、EEPROM入出力、ブザー出力等をLPC1114評価ボードに割付けます。

こう見ると、コア動作周波数を除けば、ADCやタイマなどの周辺回路が違いますので、その制御は必要ですが、殆どIO関連です。APIが同じだと1から作るのに比べ、とても楽という気がします。M0+からM0に変わっても、既存Cortex-M0+テンプレートの殆どがそのまま使えるからです。

マイコンと無線モジュールの接続速度

トラ技2014年3月号の特集で、マイコンとスマホを接続する2つの方法が解説されています。USBで直接接続する方法と、無線モジュールで接続する方法です。今回は、この無線モジュールでスマホと接続する時の「マイコンシリアルポートの接続速度」について考察します。但し、スマホ側は、既に対応アプリが完成していると仮定します。

マイコンとスマホの接続2方法比較

Android端末とマイコンをUSB経由で接続する時には、マイコン側にアンドロイド・アクセサリ通信プロトコルを実装する必要があります。ルネサスのアプリケーションノートR01AN1965JJ0100にも詳細な解説がありますが、大変そうです。

一方、無線接続は、Wi-Fi/Bluetoothモジュールを、UARTのTXD/RXDと3.3V/GNDの4本を接続すればマイコン基板が動作するので、USB経由よりは簡単です。大変なスマホとの通信処理は、無線モジュールが代行するので、マイコンは、この無線モジュールとのUART送受信処理をすれば済むからです。

マイコンと無線モジュールの接続
マイコンと無線モジュールの接続

そこで、この無線モジュールを使ったスマホ接続を検討します。

Wi-FiとBluetooth比較

Wi-FiとBluetoothを比較します(トラ技掲載表に加筆修正、価格は、秋月電子HPから抜粋)。

モジュール メリット デメリット 代表的モジュール価格
Wi-Fi ・ネット経由で通信距離制約なし
・通信セキュリティ高
・通信速度≦数10Mbps
・直接通信形態対応のスマホは少ない
・無線LAN設定が必要
XBee Wi-Fi(S6B):3680円
Bluetooth ・初期設定不要で使用可
・周波数ホッピング機能でWi-Fiよりも正確なデータ通信
・通信距離:10~30m程度
・通信速度≦240kbps
RN42XVP-I/RM:2200円

 

注目すべきは、Bluetooth無線モジュールが、特別な初期設定なしでスマホと接続できる点です。Wi-Fi無線モジュールのXBeeは、http://www.tunnelsup.com/videoなどで接続方法が紹介されていますが、Bluetoothの方が簡単です。但し、その分、通信速度がスレーブモード最大240kbps、通信距離も30m程度となりますが、マイコンUARTに接続して使うには丁度良い通信速度です。

というのは、マイコンUARTの速度は、任意に設定できる訳ではなく、CPU動作クロック速度を決めるとUARTに利用できる速度は限られた選択肢になるからです。その中で、Bluetooth通信速度をなるべく活かせる速度を選ぶことが効果的です。例えば、RL78/G1xテンプレート/32MHzの場合には、38.4kbps、LPC8xxテンプレート/30MHzの場合は、115.2kbpsなどです。テンプレート対象のマイコンでは、Wi-Fi速度を活かせないのです。

コード生成で選択できるUART速度
コード生成で選択できるUART速度

マイコンと無線モジュールの接続速度

マイコンUARTは、これまで主にPCとの接続に使ってきました。その速度は、9600bpsや19200bpsが多かったと思います。しかし、今後は、Bluetooth無線モジュールとの接続を考慮し、115.2kbps程度のより高速なUART接続が望まれます。

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

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

ARMコア利用メリットの評価

ARM Cortex-M0+コア利用のLPC8xxテンプレート発売で開発が一段落したので、Cortex-Mマイコンの現状を俯瞰して、今後の開発方針を検討します。

ARM Cortex-Mシリーズマイコンの特徴

ARM Cortex-M機種 一言で表すと…
Cortex-M0+ 超低消費電力ハイパフォーマンスマイコン
Cortex-M0 低消費電力マイコン
Cortex-M1 FPGA組込み用マイコン
Cortex-M3 汎用マイコン
Cortex-M4 デジタル信号制御アプリケーション用マイコン

 

8/16ビットキラーマイコンのCortex-M0+

M0は、8/16ビットマイコンより高性能、高エネルギー効率、高密度コードを目指して開発された32ビットコア。M0+は、M0よりさらに電力効率を最適化したコア。どちらも8/16ビットマイコンの価格レベルで32ビット性能を提供中。M0+の性能は、0.93 DMIPS/MHzで、M0の0.9 DMIPS/MHzより高性能。M0+は、M0命令セットと互換性あり。ARM Cortex-M開発ツールは、Eclipseベースとすることで、ベンダが異なっても開発環境を統一。ARM提供のCMSISを使うと、Mシリーズコアとベンダハードの差を隠ぺいすることができ、ソフト流用性も高まる。

世界定番ARMマイコンの最初のテンプレート開発にCortex-M0+を選んだ理由が、上記です。

これらCortex-Mシリーズの特徴は、ベンダやマイコン機種が変わると、一から開発環境構築やその習得、コアハードの熟知が必要だった従来マイコン開発に比べ、ベンダ/機種横断的に経験や既存資産を活かしたソフト開発が期待でき、利用者側メリットが大きいことを示しています。ARM社の狙いもココでしょう。

そこで、この「ARMコア利用メリット」を実際に試すことを今後の方針とします。

NXPのCortex-M0+テンプレート → NXPのCortex-M0テンプレートへ移植

発売中のCortex-M0+/LPC8xxテンプレートは、ARMコアベンダとしては老舗のオランダ)NXPのCortex-M0+マイコンLPC820を使ったテンプレートソフトです(写真参照)。NXPは、多くのMシリーズ製品を提供中です。そこで、このM0+テンプレートをM0機種へ移植することで、「同じベンダでCortex-M0+からM0への変更時のARMコア利用メリット」を検証します。

NXPのCortex-M0+テンプレート → フリースケールのCortex-M0+へ移植

ARMコアマイコンベンダとしては後発の米)freescaleのCortex-Mマイコンは、2014年7月現在、後発ゆえに特徴がきわ立つM0+とM4の2機種を提供中です。そこで、Cortex-M0+/LPC8xxテンプレートを、フリースケール製M0+マイコンへ移植することで、「異なるベンダでCortex-M0+ソフト移植時のARMコア利用メリット」を検証します。

どちらの検証も、いろいろなマイコンを開発してきた自身の経験と比較し、「ARMコア利用メリットを享受できるか否かの主観評価」になりますが、ARM社の狙いが絵にかいた餅なのか、本当に役立つのかの参考になると思います。

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

なお、別途販売中のルネサスRL78/G1xテンプレートは、コチラを参照して下さい。

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

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ライブラリが利用できるように工夫します。

RL78常設セミナテキスト改版

2014年5月30日発行のルネサスサポート情報 vol.197で、ルネサス常設セミナテキストの改版がレポートされました。レポートでは、「新規公開」とありますが、ダウンロードして旧版と比較した結果を示します。

セミナテキスト改版内容

コース名 レポート記事 旧版との比較結果
R8Cマイコンコース テキスト新規公開 2012年3月21日 Rev. 2.20と同じ
RL78マイコンコース テキスト新規公開 2013年12月18日 Rev. 1.30へ改版
RL78コンパイラコース テキスト新規公開 2014年3月13日 Rev. 1.07へ改版
RL78リアルタイムOSコース テキスト新規公開 2014年3月31日 Rev. 1.02へ改版

※R8Cマイコンコーステキストは、改版内容が不明で、公開テキストは前版と同じでした。

テキストの変更履歴がないので、具体的にどこを変更して改版したのかは不明です。しかし、どのテキストも内容が濃く、一読に値します

テキストですので、重要項目を1~10まで記載しています。初心者には、読むだけで大変で、理解にかけられる労力が不足することも多いと思います。そんな時は、各テキストの最重要箇所のみを抽出したコレに先ずザット目を通してください。特に、コンパイラコースのその1~3を理解した後に、テキストに戻ると理解が捗ると思います。

テンプレート活用のマイコン開発

限られた時間で効率的にマイコンを習得するには、手軽に用意できる開発環境と、テンプレートを活用するのも一つの方法です。ワードやパワーポイントには多くのテンプレートが提供されますが、組込みマイコンのテンプレートは少ないようです(サンプルソフトは、あくまでサンプルでテンプレートとは、別物です)。

そんな時は、販売中のRL78/G1xテンプレートを活用下さい。業務に使えて、テキストの重要箇所エッセンスをプログラムへ盛り込んだテンプレートになっています。世界標準のARM 32ビットマイコンLPC8xxテンプレートも販売中です。

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”がユーザ追加ファイル、それ以外が自動生成ファイルということが一目で判ります。

LPC8xx使用ライブラリとプログラムサイズ

LPC8xxには、2種類ライブラリがあることは以前記載しました。さらにROMにもI2CやUARTなどのライブラリがあるので全部で3種類ですが、今回は、最初の2種類、LPCOpenライブラリと従来ライブラリ(LPCCloseと呼ぶ)で、どの程度Flashプログラムサイズが変わるかを示します。

新規Cプロジェクトサイズ

LPCXpressoでLPC820新規Cプロジェクト作成直後のDebugビルドでのプログラムサイズが下記です。コンパイル最適化などは行っていません。つまり、ブート処理のみ行い、何もしないCプログラムです。

プログラムサイズ CRP有効 CRP無効
LPCOpenライブラリ使用 1952バイト 1540バイト
LPCCloseライブラリ使用 1140バイト 728バイト

※LPCXpresso_7.1.1_125で実施。2014/05/25現在、最新版は、LPCXpresso_7.2.0_153。

CRP: Code Read Protectionとは、Flashプログラムの読取りに制限やプロテクトをかける機能で、この機能を有効にすると約400バイト必要になることが判ります。製品出荷時には必要になる機能でしょう。

何もしないプログラムのFLASH専有率

CRP有無と使用ライブラリで4つの組合せを示しました。LPC8xxデバイスのFlash容量に対するこれらの占有率を示します。

何もしないプログラムのFLASH専有率(%)  専有率
LPCOpen CRP有効 48% 24% 12%
CRP無効 38% 19% 9%
LPCClose CRP有効 28% 14% 7%
CRP無効 18% 9% 4%

 

8ピンのLPC810はFlash容量が4Kバイトですので、LPCOpenライブラリでCRP有効にすると1952/4096=48%のサイズを「何もしないプログラム」で専有します。Cortex-M0+マイコンは、同一処理では他マイコンよりも小さいコードを生成しますが、それでも少ない残り量です。追加開発する処理量にもよりますが、30%以下を一応の目安とすると、LPC810にはLPCCloseライブラリを使う方が良さそうです。

一方、LPC810以外は、LPCOpenライブラリが使えそうです。LPCOpenライブラリは、評価ボード別やマイコン別の層構成になっていますので、LPCCloseに比べオーバーヘッドがある分、サイズが大きくなります。しかし個人的には、標準Cライブラリに近く洗練された感じがして好きなライブラリです。また、オープンな場で、使い方やバグ情報があるのも良い点です。勿論、層構成ですので、別マイコンやボードへの移植性も高いです。今後は、このLPCOpenライブラリが主流になると思います。

LPC8xxテンプレートをLPCOpenライブラリで開発したのは、このような経緯がありました。