151.自分の関数をヘッダファイルにする


2001/06/20 【ソフトウエア編TOPに戻る】

ソフトウエア編の「基礎実験のお話」では、幾つかの基本的な機能について、プログラム動作の実験を行いました。それらのプログラムの中には、他のプログラムでも利用できるような、汎用性のある関数も幾つか作りました。それらの関数は、せっかくですから、これから作っていく新しいプログラムにどんどん利用して行きたいですね。

汎用性のある関数は、新しいプログラムにソースコードを貼り付ける(コピーして持ってくる)ことで、簡単に利用することができます。でもその代わり、新規のプログラムのソースコードは非常に長くなってしまいすっきりしません。それに、関数に手直しが必要になった場合、その関数を利用している全てのプログラムについて同じ修正をしなければならず、非常に管理がしずらくなります。

そこでヘッダファイルの登場です。ヘッダファイルは共通で利用できる関数や宣言などをまとめてひとつのファイルにしてしまい、新規のプログラムで利用したい場合は、その読み込みを宣言しておくだけで、コンパイラが一緒にコンパイルしてくれます。つまり、新規のプログラムソースに、それらの関数のソースコードが記述されている必要がなくなるのです。

実は、ヘッダファイルは既に利用しています。3048F.Hというファイル名に見憶えがありますね。ここでは、3048F-CPUの各種レジスタと同じ名前の変数が宣言されていて、更にそれぞれのレジスタのアドレスが設定されています。新しいプログラムを作る時、最初に #include <3048f.h> というコードを書き込んでおくだけで、3048F.Hで宣言されている内容が利用できるようになるのでした。

これと同じように、自分で作った汎用性のある関数は、ヘッダファイルという形にまとめることができます。ここでは、myfunc.h (hは拡張子)というヘッダファイルを作ります。


151−1.ヘッダファイル myfunc.h の説明

 

ヘッダファイルを作る!といっても、別に特別なことはしません。ただ単純に、今まで作った汎用性のある関数のソースコードを並べて、拡張子が h のファイルとして保存するだけです。拡張子がhなら、ファイル名は何でもかまいません。ただし、stdio.hとかstdlib.hとかいったC言語の世界で一般的に使われているヘッダファイル名は避けましょう。

そして、新しいプログラム上で、3048f.h と一緒に以下の様に読み込みの宣言をしてあげます。

#include <3048f.h>

#include <myfunc.h>

といった感じです。

 

ここをクリックすると最新のmyfunc.hファイルをダウンロードすることが出来ます。

ヘッダファイルの中身は、大体以下のような感じになります。関数が並んでいるだけです。

/* 待ち時間発生初期化 *********************************/
void timer_init(void){
    ITU0.TCR.BYTE = 0x23; /* GRAコンペアマッチ clock 1/8 */
    ITU0.GRA = 0x07d0; /* GRAを2000に設定 */
    ITU.TSTR.BIT.STR0 = 0; /* カウント停止状態 */
    return;
}

/* 待ち時間発生 引数に、必要なミリ秒を指定する***********/
void wait(int msec){
int i;
    ITU.TSTR.BIT.STR0 = 1; /* ITU0 TCNTカウント開始 */
    for(i=0;i<msec;i++){
        do{ /* TCNT = GRAになるまで待つ(1mS) */
        }while(ITU0.TSR.BIT.IMFA == 0);
        ITU0.TSR.BIT.IMFA = 0; /* 検知フラグを戻して再開 */
    }
    ITU.TSTR.BIT.STR0 = 0; /* ITU0 TCNTカウント終了 */
    return;
}

/* 以下に、その他の関数類のソースコードが続く */

 

myfucn.h は、これからTekuRobo工作室で作っていくプログラムの中で、汎用性がある関数が出てくるたびに、追加していきたいと思います。なので、常に最新のmyfunc.hは、ここからダウンロードできるようにしておくことにします。


汎用性のある関数は、このようにヘッダファイルとして別に管理したほうが楽です。逆に、関数を作る時には、なるべく汎用性を持つように意識して作ることが必要です。プログラムを関数として部品化し、色々なプログラム上で効率良く再利用できるのは、C言語の大きな強みです。

【ソフトウエア編TOPに戻る】


【表紙に戻る】