main関数の展開


【main関数の基本形】

 main関数は、C言語のプログラムには必須のもので、かつ唯一でなければ
なりません。そして、実行開始時には自動的に一番最初に実行されます。
この実行のされかたを実際のコンパイル結果でみてみましょう。
下記はコンパイルが正常に終了する最も簡単なプログラムです。




これを実際にコンパイルした結果のアセンブラ言語への展開リストは下記の
ようになります






 このコンパイル結果で0番地からの命令を解読すると、まずページ0への
切替え後、GOTO命令でmainの最初の番地にジャンプしています。
 PICの電源投入時やリセット時には、必ず0番地から実行開始となりますから、
これで必ずmainの先頭にジャンプしますので、mainが最初に実行されることに
なります。
 次にmainブロックの直後にはSLEEPという命令があります。これで判るように、
mainは一度実行されると、そのまま抜け出てSLEEP命令を実行して、PICは
スリープ状態、つまり停止状態になります。
従って、そのままではmain内のプログラムは1回だけしか実行されないことに
なってしまいます。

【永久ループのmain関数】

 上記のように1回だけでなく、ずっとある処理の実行を継続させたい
場合には、
mainの処理が完了して抜け出ないように、ループさせる
ことが必要であることがわかります。
このループさせる方法には幾つかありますが、単純に考えて、下記の
ように
while(1)文を使って、while文のブロック内の処理を永久に繰り
返すようにする方法があります





 このリストのコンパイル結果は、下記のようになり、mainの最後の
行が、
GOTO文で繰り返しの先頭つまり自分自身に戻っていることが
判ります。
これで
mainの処理が完了して抜け出ることはありませんから、ずっと
処理が継続して実行されることになります。











       目次ページへ