ソフトウェアの開発環境を知る ―― さまざまなマイコンをサポートするフリー・ツールを使う
tag: 組み込み ディジタル・デザイン
技術解説 2010年2月19日
ここでは,マイコンのソフトウェア開発環境について解説します.特定のマイコン・ファミリに依存せず,多くのアーキテクチャで共通に使えるツールを例にします.統合環境に見えるツールでも裏ではここで説明するツールが動いていることがあります.(編集部)
ここではマイコンに搭載するソフトウェアの開発に必要な知識を解説していきます.特にソフトウェア開発で必要となるツールとはどのようなものか,それはどのように手に入れればよいのか,どんな知識があればそれらを使いこなせるのかについて説明します.組み込み機器向けのソフトウェアを開発したことのない技術者が心配になる事柄を網羅します.
具体的なツールとして,世の中のすべてのプロセッサをサポートしているといっても過言ではない「GNU」を使った開発環境に関して取り上げます.さまざまなソフトウェア開発環境に関する疑問を解決していきます.
1.組み込みソフト開発の基礎知識
皆さんの中には,ソフトウェアを開発する環境として,例えば,Windowsが動作しているパソコンに向かって,グラフィカルな画面を持つ開発ツールを使い,さらにそのパソコン上でソフトウェアの挙動を確認する,といった手順を思い浮かべる方がいるかもしれません.パソコンで動作するソフトウェア開発は,実際にこのような環境が用いられています.
マイコンを搭載する組み込み機器でも,パソコン用アプリケーション・ソフトウェアの開発と同じような開発環境が使用できれば大変便利です.しかし,組み込み機器の場合,Windowsのようなオペレーティング・システムは搭載していないほうが普通です.便利なAPIなどは用意されておらず,マイコンのハードウェアを直接制御しなければなりません.そもそも,最終的に動作させるマイコンの上で動作する開発環境なんてものは存在しないでしょう.
●パソコン向けとは大きく異なる環境で開発する
マイコンを搭載する機器で動作させるソフトウェアは,「組み込みソフトウェア」と呼ばれ,パソコン向けとは大きく異なる開発の方法を用います.
パソコン向けのアプリケーションでは,ソフトウェアを開発するプロセッサ(CPU)と,開発されたソフトウェアが実行されるプロセッサが同じです.このような場合を,「ネイティブ開発環境」と呼びます(図1).
これに対し組み込みソフトウェアでは,最終的に動作させるマイコン・システムを使ってソフトウェアを開発することは困難です.そこで,Windowsパソコンなどで利用可能なソフトウェア開発環境を用います.そして,開発されたソフトウェアは,マイコンのメモリにダウンロードして動作させます.最終的に正しい動作が確認されたソフトウェアはROMなどに書き込まれ,組み込み機器に搭載されることになります.この開発手法では,開発に使われるプロセッサと,開発されたソフトウェアが実行されるプロセッサが異なります.このような環境を「クロス開発環境」と呼びます(図2).
クロス開発環境において,開発に使うコンピュータを「ホスト・マシン」,ホスト・マシンのCPUのことを「ホスト・プロセッサ」と呼びます.一方,開発したソフトウェアが動作するCPUのことを「ターゲット・プロセッサ」と呼びます.
●組み込みソフト開発ではさまざまツールを使う
組み込みソフトウェア開発では,ホスト・マシンにおいて,ターゲット・プロセッサ向けのソフトウェアを開発していくことが目的となります.この際に使われるのがクロス開発ツール群です.
主要なクロス開発ツールについて説明します.
(1)アセンブラ
アセンブリ言語で書かれたソース・コードをターゲット・プロセッサ向けの機械語に変換するツールをアセンブラといいます(図3).
アセンブラは,ターゲット・プロセッサが規定するアセンブリ言語に即した文法を解釈することが特徴です.例えば,OPコードに対するオペランドの個数などを解釈し,機械語に変換します.
(2)コンパイラ
C,C++,Java,C#にような高級言語と呼ばれるプログラミング言語で書かれたソース・コードを機械語へと変換するツールをコンパイラといいます(図4).
コンパイラは,入力されたソース・コードをできる限りソフトウェア開発者の希望に沿うように最適化を実施する機能も持ちます.
(3)ライブラリ
ライブラリは厳密にはツールではありません.しかし,組み込みソフトウェアを開発する際に活用するものなので,ツールの一部と見なした方が自然です.
ライブラリは頻繁に使う関数やルーチンをまとめたバイナリ・ファイルです.ソース・コード中でライブラリ内のルーチン呼び出すと,ライブラリのコードが組み込まれます.
(4)リンカ
アセンブラとコンパイラで生成した機械語コードとライブラリをつなぎ合わせ,さらに,アドレス情報を加味し,実行形式を作成するツールをリンカといいます(図5).
例えば,ある関数や変数の配置場所を指定したいとき,それらのアドレスをリンカに与えることで,アドレス情報を調整します.
(5)バイナリ・ツール
アセンブラやコンパイラが出力するバイナリ・ファイルの内容は,人間が簡単に判断できないデータ列です.そこで,バイナリ・ファイルの内容を分かりやすい形式に変換したり,表示したり,データの表現形式を変換するといった作業が求められる場合があります.これを行うためのツール群がバイナリ・ツールです(図6).
例えば,機械語をアセンブリ言語で表示したり,ライブラリに含まれる関数名を表示したり,バイナリ・データのフォーマットの変換などを行います.
(6)デバッガ
多くの組み込み機器は,パソコンのようなディスプレイを持っていません.例えば,MP3プレーヤのような携帯機器の場合には,LEDや解像度の低いLCDくらいしか搭載していません.このような表示装置だけでソフトウェアをデバッグするのは困難を極めます.
そこで,デバッガと呼ばれるツールを用います(図7).デバッガは,ある番地やある変数が期待値になったときにソフトウェアの実行を停止したり,システムの状態を検査できる機能を持ちます.