各種システム開発・WEBコンテンツ制作・WEBデザイン・ホームページ制作・インフラ設計・構築・レンタルサーバー・ソフトウェア技術者のアウトソーシング事業を行っております。

11 月
28

mainルーチンまでの過程

技術スタッフ


JavaやC#のプログラムを見ると、起点が”main()”になっています。
では、mainに来るまでの間に何をしているのか?、と尋ねると、おそらく分からない方が
多いと思います。
それは、高級言語は人が理解し易い仕組みであるため、このようなプリセッティングの
部分は見えないところで処理しているからです。
一方、低級言語を使う組み込みソフトウェアでは、mainは到達地点になります。
mainに来るまでの制御を見ることができて、その後にmainに入るからです。
今回は、高級言語では見えないmainに来るまでに何をしているのかを話します。

・リセット信号とプログラムの起動
以前こちらのブログにも書きましたが、プログラムは電源が供給されリセット信号が来て
動き始めます。
その仕組みは、リセット信号が入ると、プログラムカウンタ(プログラムを処理している
場所を示す値)が0になります。
そして、0番地には最初にプログラムを実行するルーチンのアドレスをセットします。
そうすることで、リセット信号で0番地に設定したアドレスのルーチンの処理を始めます。
余談ですが、組み込みソフトウェアでは最初に処理するルーチンの名称にinitを使うのが
多いです。

・クロックの設定
initで最初に設定するのは、プログラムを実行する動力源であるクロックです。
マイコンは、入力するクロックをそのまま使うことができなく、分周を設定する領域が
あらかじめ用意されています。
分周を設定することにより、自動的にプログラムの処理速度(1つの処理をする時間)が
決まります。
この設定は、処理速度はmainが動いてからだと動作が不安定になるので、initの中で
おこないます。

・割り込みの設定
割り込みは、組み込みソフトウェアを制御するのに必要不可欠なシステムです。
正確な時間は、割り込みを使うことで実現しているからです。
ここで、1m秒の時間の作り方を説明します。
先程のクロックの設定で処理速度が決まりました、そしてもう一つ、割り込み機能には
減算カウンタが用意されていて、ここに1m秒になる値を設定すれば、1m秒が経過する毎に
割り込みが発生します。
この設定も、mainが動いてからでは動作が不安定になるので、initの中でおこないます。

・その他の設定
その他にも、ポートの設定や、マイコンが持っているシリアル通信やADコンバーター等の
機能を使う場合も、その機能を使うための設定をします。
なお、これらはクロックや割り込みとは異なり、initの中でおこなう必要はありません。
とはいえ、mainの中で設定を切り替えるシステムでなければ、安全を考えてinitの中で
おこなうのが通常です。

・初期化
何故ここで初期化するのかと疑問に思うかもしれませんが、それには理由があります。
組み込みソフトウェアは、PCアプリ等の他のソフトウェアと比べると処理する速度が遅く、
さらに初期化する領域も広いため、mainで初期化すると本来やらなければならない処理の
開始が遅れてしまいます。
もちろん、mainで初期化しなければならない所はmainの中でおこないます。

・最後に
initで全ての設定が終わると、mainルーチンに入り、mainの中をぐるぐるとループして
プログラムを実行していきます。
後は、新たにリセット信号が入るまでずっとループし続けます。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

月別アーカイブ

カテゴリ