2016-06-17 3 views
1

私はマイクロコントローラ32ビットとcodewarriorコンパイラのスタートアップコードに取り組んでいます。リンカスクリプトを扱う必要があるためです。 RAMstackの初期化コードで使用されていた特定の変数は、リンカースクリプトに由来します。_f_data_romリンカスクリプトシンボル

リンカースクリプトは、これらの変数を異なるアドレスで初期化します。問題は、1つの変数のアドレスが間違っていることです。リンカースクリプトでは、コマンド_f_data_romにしたがって初期化されます。

  • スタック、RAM初期化のアドレスを提供するリンカの初期化変数をどのように教えてください。
  • このコマンドが意味するもの_f_data_rom

それはあなたがそれらの変数は、例えば、エクスポート方法__ppc_eabi_linker.hを見ている69ページのthis documentを見る

RC_SDATA_SRC  = _f_sdata_rom; 
RC_SDATA_DEST  = _f_sdata; 
RC_SDATA_SIZE  = (SIZEOF(.sdata)+3)/4; 
RC_DATA_SRC  = _f_data_rom; 
RC_DATA_DEST  = _f_data; 
RC_DATA_SIZE  = (SIZEOF(.data)+3)/4; 
+0

リンカースクリプト全体を投稿する必要があります。ところで、私はそれがフラッシュの静的なデータの場所のアドレスだと思います。通常、フラッシュアドレス空間のどこかのセクションとして定義されます。 – LPs

+0

これらの変数は、ブート時にbssセクションに割り当てられた変数の値のコピーを実行するソース(フラッシュ)アドレスとdest(ラム)アドレスのようです(例えばstart.s) – LPs

+0

はい、あなたは同じ仕事をしています。しかし、問題は "_f_data_rom"がフラッシュの間違ったアドレスをフェッチしていることです。 私は心配です、このcommadの '_f_data_rom' 'はどうですか?どのように私はそれがフラッシュの正しいアドレスを取得することを修正することができます。 – waq

答えて

0

次のようになります。同じ文書にthis link to file

を、65ページであなたはリンカーのアドレスを構成するフォームを見つけることができます。それを見て、それらの設定を確認してください。