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ライブラリで開発したのは、このような経緯がありました。