ARM「mbed」の開発環境にはクラスライブラリが用意されており、ターゲットマイコンの種類を問わない開発が可能ですが、ハードウェアを直接たたくベアメタルの手法でも開発が可能です。バイナリ軽量化を図れるベアメタル開発について勉強します。
本連載ではARMマイコン「LPC1114」に内蔵されたデバイスを、mbedが提供するクラウド開発環境のクラスライブラリを介して利用する方法について説明してきました。今回はmbedのクラスライブラリがない状態、いわゆるベアメタルでハードウェアへアクセスする手段について考察してみたいと思います。
基本に戻って発光ダイオード点滅プログラムを例に、mbedのクラスライブラリを使うメリットとベアメタルプログラミングのメリット、あるいは使い分けについて理解を深めていければと思っています。
リスト1は発光ダイオード点滅のプログラムです。まずはこのプログラムを例に、mbedのクラスライブラリを使う際のメリットとデメリットを考えてみましょう。
このリストは新規にプログラムを生成するときに、テンプレートを“Blinky LED Hello World”に指定すれば自動的にmain.cppとして生成されるソースコードです。2行目のDigitalOutというクラスから制御したいピンを指定してインスタンスを生成しています。このインスタンスに1か0を代入(5行目と7行目)するだけで簡単に個々のピン出力をON/OFFできます。
1: #include "mbed.h" 2: DigitalOut myled(LED1); 3: int main() { 4: while(1) { 5: myled = 1; 6: wait(0.2); 7: myled = 0; 8: wait(0.2); 9: } 10: }
このソースコードはさまざまなメーカーが提供するmbed enablesのマイコンボードで動作させることができ、執筆時点で50近くのマイコンボードがあります。
これらのマイコンボードはメーカーによって内蔵する周辺デバイスの種類や機能が異なりますし、MPUもCortex-M0やM3、M4、A9などさまざまですが、こうした差異をmbedのクラスライブラリが吸収しているのです。
つまり、mbedのクラスライブラリを利用することで、容易に周辺デバイスをアクセスすることができ、mbed enableなCPUボード間でソースコードの互換性が保たれるなどのメリットがあります。
mbedクラスライブラリを使うデメリットについても検討してみましょう。
コンパイルに成功すればバイナリファイル(XXX.bin)が生成されてローカルPCにダウンロードされます。このサイズを見てみましょう。10KBほどではないでしょうか。LPC1114は32KBのフラッシュメモリ容量を持つので、この程度であれば何の問題もなく動作可能ですが、組み込み技術者の視点で言えば、GPIOの1つをただトグル(オン・オフを繰り返す)しているだけのプログラムでこの容量は頂けません。mbedのクラスライブラリを使うとリンク時にさまざまなオブジェクトがリンクされ、バイナリの容量が大きくなってしまうのです。
Copyright © ITmedia, Inc. All Rights Reserved.