MBD9F126(ARM Cortex R4)マイクロコントローラーを使用しています。その中で私はコードをROMにフラッシュし、RAMのコピー後にRAMからコードを実行しています。Greenhillsコンパイラを使用しています。RAMコピーの前に、基本的なボード初期化コードを実行しています。
LDR r12, ADDRESS_START_PREINIT
BLX r12
ADDRESS_START_PREINIT:DCD Start_PreInit
Start_PreInitはボード初期化関数です。BLXの後にこのように指定すると、RAMの場所に分岐します。RAMのコピーはまだ行われていないため、不明な領域に移動します。
これの代わりに私が書いているなら
bl Start_PreInit
コードのROMの場所に行くことは正しく動作しています。なぜコンパイラがそのような振る舞いをするのですか?
また、ADDRESS_START_PREINIT:DCDStart_PreInit。リンク中に行われますか?