目次

ニュース

日記カテゴリ

書庫

オブジェクト指向分科会で話をしていた、「main」を呼び出すのものについて考えて見ます。もちろん、Windows上で_tmain()を呼び出すものはWindowsそのものですので、この時点はWindowsが神ですね。

じゃ電源入れたときにはどうなるのよ?

(ごめんなさい、またしてもAT系の話じゃありません。やつはBIOSが起動Program Counterにいるのでよくわかってないです^-^;)

ここでは、とりあえずSH-3とかいうマイコンでありながら内蔵ROMを持っていないPCみたいなマイコンで取り上げてみます。

ここで行われることは、

電源On -> FLASHROMからの読み出し -> RAMへ展開 -> 展開されたRAMのmainにPCを移動。

になります。もちろんここでのmainはOSのmainかもしれないですし、メッセージループを待る単なるループプログラムかもしれません。

 

1.電源On

この時点では、CPUのプログラムカウンタが0x00000000に固定されていて、このメモリ番地に実行可能なプログラムを配置します。(この時点ではRAMも使えないですし、周辺回路も当然動きませんので、最低限の設定をCPUにセットすることにします。)

ここでやることは、

・周波数の設定

・RAMのアクセス速度の設定、外部I/Oのアクセス速度の設定

・キャッシュレジスタの設定

・SDRAMのクロックレイテンシ、リフレッシュタイマの設定、プリチャージの設定

・C言語のスタック領域の確保とレジスタの設定

・次のステージへJUMP

と、いったところでBIOSみたいな部分になります。

 

2.RAMへ展開

ここからは、スタックがセットされたのでC言語で記述可能です。

SDRAMや周辺回路へのアクセスが可能になった時点で、FLASHROMからSDRAMへプログラムとデータを展開します。当然、FLASHROMに格納されているプログラムが指し示すポインタは、すべてSDRAMへの展開後のポインタでなくてはいけないです。

プログラムを展開したところで、割り込みのアドレスを設定します。例外が発生したときや、シリアル入力などにジャンプするアドレスをすべて定義します。

 

3.mainにJump

ここでやっと、mainに飛べます。

ここではスタックを一旦リセットしたいので、mainの実ポインタを引数に設定してStart( main )を呼び出すような記述をします。

_Start:
        JMP      @R4    
        NOP
        .END

といったところ。意外と面倒くさいんですねぇ。

投稿日時 : 2007年7月23日 9:27
Feedback
No comments posted yet.
タイトル
名前
Url
コメント 

Blog 利用状況

  • 投稿数 - 67
  • 記事 - 0
  • コメント - 3373
  • トラックバック - 20

コミュニティ

プロファイル