連載
» 2015年08月14日 07時00分 UPDATE

「mbed」で始めるARMマイコン開発入門(11):ARMマイコンの“ベアメタルLチカ”に挑戦 (1/3)

ARM「mbed」の開発環境にはクラスライブラリが用意されており、ターゲットマイコンの種類を問わない開発が可能ですが、ハードウェアを直接たたくベアメタルの手法でも開発が可能です。バイナリ軽量化を図れるベアメタル開発について勉強します。

[今岡通博,MONOist]

はじめに

 本連載ではARMマイコン「LPC1114」に内蔵されたデバイスを、mbedが提供するクラウド開発環境のクラスライブラリを介して利用する方法について説明してきました。今回はmbedのクラスライブラリがない状態、いわゆるベアメタルでハードウェアへアクセスする手段について考察してみたいと思います。

 基本に戻って発光ダイオード点滅プログラムを例に、mbedのクラスライブラリを使うメリットとベアメタルプログラミングのメリット、あるいは使い分けについて理解を深めていければと思っています。

photo クラウド開発環境「mbed」の概略図

おなじみのblinky

 リスト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:	}
List1

 このソースコードはさまざまなメーカーが提供するmbed enablesのマイコンボードで動作させることができ、執筆時点で50近くのマイコンボードがあります。

photo mbed.orgで紹介されているマイコンボードの一部

 これらのマイコンボードはメーカーによって内蔵する周辺デバイスの種類や機能が異なりますし、MPUもCortex-M0やM3、M4、A9などさまざまですが、こうした差異をmbedのクラスライブラリが吸収しているのです。

 つまり、mbedのクラスライブラリを利用することで、容易に周辺デバイスをアクセスすることができ、mbed enableなCPUボード間でソースコードの互換性が保たれるなどのメリットがあります。

 mbedクラスライブラリを使うデメリットについても検討してみましょう。

 コンパイルに成功すればバイナリファイル(XXX.bin)が生成されてローカルPCにダウンロードされます。このサイズを見てみましょう。10KBほどではないでしょうか。LPC1114は32KBのフラッシュメモリ容量を持つので、この程度であれば何の問題もなく動作可能ですが、組み込み技術者の視点で言えば、GPIOの1つをただトグル(オン・オフを繰り返す)しているだけのプログラムでこの容量は頂けません。mbedのクラスライブラリを使うとリンク時にさまざまなオブジェクトがリンクされ、バイナリの容量が大きくなってしまうのです。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.