組み込みソフトウェアの開発手順を理解する ―― C言語でマイコンを制御するために不可欠

山際 伸一

ここでは,組み込みシステムで用いられるソフトウェアの開発環境についての基礎を説明します.また,C言語による開発のターゲットとなるマイコンの場合を具体的に説明します.(編集部)

 組み込み機器のマイコンを動作させるためのソフトウェアは,組み込みソフトウェアと呼ばれています.組み込みソフトウェアの開発の方法には,特徴的な点があります.

 パソコンで動作するソフトウェアは,パソコンで開発されるのが一般的です.開発に使用しているパソコン上で,動作も確認できます.また,一つの開発ツールで,さまざま用途のソフトウェアを開発できます.

 これに対し,組み込みシステムのハードウェアでは,ほとんどの場合,開発ツールを動作させることはできません.開発にはパソコンを利用できますが,開発されたソフトウェアは,パソコンから設計対象となる機器に転送しなければ実行できません.設計対象のハードウェアは,開発のたびに異なるのが普通です.ターゲット・プロセッサも異なることがあります.このため,組み込みソフトウェアの開発では,ターゲット・プロセッサごとに最適な開発ツールを用意する必要があります.

 

1. C言語による組み込みソフトウェア開発の流れ

 組み込み機器の開発において,ソース・コードの記述からマイコンで動作する実行形式が作成され,製品が完成するまでの流れを図1に示します.



図1 組み込みソフトウェアの開発の流れ

ソース・コードが実行形式が作成され,実行形式を組み込んだ製品が完成するまでの流れを示している.

● ソース・コードの用意

 ソース・コードには,製品の目的となる動作を記述したアセンブリ・コードや,高級言語コード(C言語など)が含まれます.

 図1の①ではアセンブリ言語で記述されているソース・コードとC言語で記述されているコードが用意されています.一般的に,テキスト・エディタで記述されたものがソース・コードと呼ばれ,最初に用意されます.

● コンパイルとアセンブル

 アセンブリ言語で書かれたソース・コードはアセンブラへ,高級言語で書かれたコードはコンパイラへ渡され,ターゲット・プロセッサのみが理解可能なバイナリ・データへと変換されます(図1の②).このバイナリ・データを保持するファイルのことを,ソフトウェア開発の世界ではオブジェクト・ファイルと呼びます.

 オブジェクト・ファイルは,決められたフォーマットに従って作成されます.このファイル・フォーマットは,コンパイラやアセンブラによって異なります.

● リンク

 オブジェクト・ファイルには,具体的なアドレス情報がありません.例えば,ターゲット・プロセッサが起動時に最初に実行しなければいけないコードが,どのアドレス(番地)に配置されるべきかは,定義されていません.分岐命令の分岐先アドレスも決定されておらず,未完成な命令として格納されています.

 リンクでは,具体的なメモリ配置情報,つまりアドレス情報を付加し,分岐命令の実行コードを完成させます.そして完全な形の命令列とデータ列としてファイルに保存します(図1の③).このアドレス配置情報が記述された指示ファイルを,リンカ・スクリプトと呼びます.

● デバッグ

 リンカで作成された実行形式は,ターゲット・プロセッサで動作を確認できます.

 動作確認では,デバッガを使います(図1の④).実行形式中のアドレス情報を使ってマイコンのメモリにダウンロードします.最初に実行するアドレスや,データの初期値などを設定します.ターゲット・プロセッサに実行を指示すると,ターゲット・プロセッサで動作を確認できます(図1の⑤).

● 実行形式の変換

 実行形式のファイルをターゲット・システムに搭載する際には,ROM化が必要です.この際,実行形式のファイル中にある命令コードやデータを,指定されたアドレスへと配置し直す必要があります(図1の⑥).

 最後にROMライタなどのツールを使ってROMに書き込み,製品に搭載します(図1の⑦).

 なお,フラッシュ・メモリを搭載するマイコンの場合は,デバッガから直接書き込めるので,この工程は必要ありません.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日