組み込みソフトウェアの開発手順を理解する ―― C言語でマイコンを制御するために不可欠
tag: 組み込み ディジタル・デザイン
技術解説 2010年1月25日
3. 本稿で使用するソース・ファイル
今回のターゲット・システムを使いながら,本稿の説明を進めるに当たって,使用するファイルについて説明します.
ここで説明するファイルのうち,C言語で記述するソース・ファイル以外は,最近は開発ツールが生成してくれることが増えています.本稿でも,「あらかじめ用意されているファイル」として扱います.従って,少なくとも本稿を読破するまでは,理解できなくても何の問題もありません.
しかし本稿を読破したあと,より複雑なことがしたくなったり,実際に開発で活用したい場合のために,概要を解説しておきます.
本稿で使用するソース・ファイルを表2に示します.新たにプロジェクトを作成する際には,これらのファイルをプロジェクトのフォルダすべてに置く必要があります.
● C言語ソース・ファイル
C言語で記述したソース・ファイルは,第3章以降で繰り返し作成することになるファイルです.例えば,リスト1のようなコードのものです.
このファイルには,main関数を必ず書きます.もし,割り込みをサポートするのであれば,割り込み処理のためのinterrupt_handler関数も必ず記述します.
あらかじめ用意されているものとして扱うライブラリ用のファイルであるcqlib.cとそのヘッダ・ファイルであるcqlib.hもソース・ファイルの一種です.
ソース・コードをリスト2とリスト3に示します.これらのファイルの内容は,今は分からなくても問題ありません.本特集を読み進めるに従って,理解できるようになります.
ライブラリの二つのファイルは,名前を変えてはいけません.また,main関数の記述を含むファイルについては,リスト4に示すメイク・ファイルに記述されている名前に一致するようにしてください.
● メイク・ファイル
メイク・ファイルは,コンパイラやアセンブラ,リンカを使って実行形式ファイルを作成する際の指示を与えるものです.例をリスト4に示します.この際に表2に示したソース・ファイルを使います.メイク・ファイルは,開発ツール側で使われますので,必ず用意しなければいけません.
独自のプロジェクトでも,このメイク・ファイルは簡単に転用することができます.メイク・ファイルの中のSRCS,OBJS,EXEの三つの変数を書き換えます.
SRCSにはC言語ファイルを指定します.
OBJSはオブジェクト・ファイルを指定します.C言語ファイルとオブジェクト・ファイルの拡張子以外の名前は同じにします.
EXEは実行形式ファイルの名前です.これも,C言語ファイルと同じ方がよいでしょう.
これらの変数をもとに,コンパイルなどの作業が行われます.
● リンカ・スクリプト
リンカ・スクリプトは,マイコンが使用するメモリへの,オブジェクト・データの配置方法を指定するものです.やや複雑になるので,ここでは,簡単に解説をしておきます.
リスト5のリンカ・スクリプトはすべてのプロジェクトで共通に使用しているものです.独自に作るプロジェクトでもそのまま転用できるでしょう.
今回マイコンが使用できるメモリは,8Kバイトです.リスト5の①では,メモリ領域を定義しています.開始番地は,図3においてメモリが割り当てられている0x0です.
リスト5の②で,オブジェクト・ファイルに含まれるさまざまなデータをどこに配置するか指定しています.
リスト5の③でメモリの最後のアドレスを計算します.
リスト5の④では,最後の4バイトのところにスタック・ポインタを配置しています.スタックは,この番地から0x0番地の方向に伸びていきます.図5に,このメモリ配置を示します.
● スタートアップ・ルーチンと割り込みベクタ
リスト6に,スタートアップ・ルーチンと割り込みベクタを示します.本特集では,あらかじめ用意されているものとしています.
割り込みベクタは割り込みを処理する専用関数interrupt_handlerを呼び出します.この呼び出し部分に関しては,割り込みを用いるときだけ有効になるようにしてください.
interrupt_handler関数の呼び出しがあると,リンカはこの関数がどこかのファイルに定義されているものだとして探します.しかし,C言語ファイルにこの関数が含まれていないとエラーになりますので,割り込みを使わない場合は,この呼び出しをしないようにすることが必要です.このとき,アセンブリ言語における行単位のコメントを表す#を使います.割り込みを使う場合には,#を取り除きます.割り込みを使わない場合は,#を行頭に付けて無効にします.
やまぎわ・しんいち
高知工科大学 情報学群 准教授