(toppers-users 377) Re: hardware-init-hook の呼び出しについて
Takayuki WAKABAYASHI
takayuki @ ertl.ics.tut.ac.jp
2002年 4月 7日 (日) 23:17:36 JST
豊橋技術科学大学の若林です。
"Susumu Kawai" <shounan @ ma.neweb.ne.jp>さんは書きました:
> スタートアップモジュール(start.S)にある以下の部分で"hardware_init_hook"が
> "0"に設定されています。
> 「PROVIDE(hardware_init_hook = 0);」
> 実際にサンプルを使用してロードモジュールを生成しターゲットで実行してみるとこ
> の設定でいくと"hardware_init_hook"を呼び出さないはずだと思いますが何故か"0"
> 以外の値が設定されており"hardware_init_hook"が呼び出されてしまいます。
> 「PROVIDE(hardware_init_hook = 0);」以外の設定が他に必要なのでしょうか?
PROVIDE(hardware_init_hook = 0); という記述はリンクスクリプトの中にあると
思います。このPROVIDEというのは、詳細はinfoを参照されるとよいと思いますが、
「参照されているが "定義されていない" シンボルに与える値を設定する」と
いうものです。そのため、どこかにhardware_init_hookが定義されていた場合、
そちらの定義が優先されてしまいますので、スタートアップはフックを実行します。
ARM7TDMIですと、システムとしてevaluator_7tが設定されていると思います。
この場合、evaluator_7t用のターゲット依存部(sys_support.S)の中に
hardware_init_hookがありますので、このラベルを削除するか、名前を変えるか、
関数を削除すればスタートアップ時に実行されることはなくなります。
ちなみにPROVIDE(...);という定義は、hardware_init_hookが未定義のときに、
gccが"未定義シンボルの参照"エラーを出力するのを抑えるためです。
//-------------------------------------------------
//Takayuki WAKABAYASHI (わかばやし たかゆき)
// mailto: takayuki @ ertl.ics.tut.ac.jp
//-------------------------------------------------
//豊橋技術科学大学 工学研究科 情報工学専攻
// 組込みリアルタイムシステム研究室
// Embedded and realtime system laboratory
// Dept. of information and computer science
// Toyohashi univ. of technology