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

山際 伸一

3. 本稿で使用するソース・ファイル

 今回のターゲット・システムを使いながら,本稿の説明を進めるに当たって,使用するファイルについて説明します.

 ここで説明するファイルのうち,C言語で記述するソース・ファイル以外は,最近は開発ツールが生成してくれることが増えています.本稿でも,「あらかじめ用意されているファイル」として扱います.従って,少なくとも本稿を読破するまでは,理解できなくても何の問題もありません.

 しかし本稿を読破したあと,より複雑なことがしたくなったり,実際に開発で活用したい場合のために,概要を解説しておきます.

 本稿で使用するソース・ファイルを表2に示します.新たにプロジェクトを作成する際には,これらのファイルをプロジェクトのフォルダすべてに置く必要があります.

表2 本稿で使用するソース・ファイル

 

● C言語ソース・ファイル

 C言語で記述したソース・ファイルは,第3章以降で繰り返し作成することになるファイルです.例えば,リスト1のようなコードのものです.

リスト1 C言語ソース・ファイル

 このファイルには,main関数を必ず書きます.もし,割り込みをサポートするのであれば,割り込み処理のためのinterrupt_handler関数も必ず記述します.

 あらかじめ用意されているものとして扱うライブラリ用のファイルであるcqlib.cとそのヘッダ・ファイルであるcqlib.hもソース・ファイルの一種です.

 ソース・コードをリスト2リスト3に示します.これらのファイルの内容は,今は分からなくても問題ありません.本特集を読み進めるに従って,理解できるようになります.

リスト2 ライブラリのソース・ファイルcqlib.cの一部

 

リスト3 ライブラリのヘッダ・ファイル

 ライブラリの二つのファイルは,名前を変えてはいけません.また,main関数の記述を含むファイルについては,リスト4に示すメイク・ファイルに記述されている名前に一致するようにしてください.

リスト4 メイク・ファイル

● メイク・ファイル

 メイク・ファイルは,コンパイラやアセンブラ,リンカを使って実行形式ファイルを作成する際の指示を与えるものです.例をリスト4に示します.この際に表2に示したソース・ファイルを使います.メイク・ファイルは,開発ツール側で使われますので,必ず用意しなければいけません.

リスト4 メイク・ファイル (クリックすると拡大します)

 独自のプロジェクトでも,このメイク・ファイルは簡単に転用することができます.メイク・ファイルの中のSRCS,OBJS,EXEの三つの変数を書き換えます.

 SRCSにはC言語ファイルを指定します.

 OBJSはオブジェクト・ファイルを指定します.C言語ファイルとオブジェクト・ファイルの拡張子以外の名前は同じにします.

 EXEは実行形式ファイルの名前です.これも,C言語ファイルと同じ方がよいでしょう.

 これらの変数をもとに,コンパイルなどの作業が行われます.

● リンカ・スクリプト

 リンカ・スクリプトは,マイコンが使用するメモリへの,オブジェクト・データの配置方法を指定するものです.やや複雑になるので,ここでは,簡単に解説をしておきます.

 リスト5のリンカ・スクリプトはすべてのプロジェクトで共通に使用しているものです.独自に作るプロジェクトでもそのまま転用できるでしょう.

リスト5 リンカ・スクリプト (クリックすると拡大します)

 今回マイコンが使用できるメモリは,8Kバイトです.リスト5の①では,メモリ領域を定義しています.開始番地は,図3においてメモリが割り当てられている0x0です.

 リスト5の②で,オブジェクト・ファイルに含まれるさまざまなデータをどこに配置するか指定しています.

 リスト5の③でメモリの最後のアドレスを計算します.

 リスト5の④では,最後の4バイトのところにスタック・ポインタを配置しています.スタックは,この番地から0x0番地の方向に伸びていきます.図5に,このメモリ配置を示します.

● スタートアップ・ルーチンと割り込みベクタ

 リスト6に,スタートアップ・ルーチンと割り込みベクタを示します.本特集では,あらかじめ用意されているものとしています.

リスト6 スタートアップ・ルーチンと割り込みベクタ (クリックすると拡大します)

 割り込みベクタは割り込みを処理する専用関数interrupt_handlerを呼び出します.この呼び出し部分に関しては,割り込みを用いるときだけ有効になるようにしてください.

 interrupt_handler関数の呼び出しがあると,リンカはこの関数がどこかのファイルに定義されているものだとして探します.しかし,C言語ファイルにこの関数が含まれていないとエラーになりますので,割り込みを使わない場合は,この呼び出しをしないようにすることが必要です.このとき,アセンブリ言語における行単位のコメントを表す#を使います.割り込みを使う場合には,#を取り除きます.割り込みを使わない場合は,#を行頭に付けて無効にします.

 

やまぎわ・しんいち
高知工科大学 情報学群 准教授
 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! 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日