1
私はマイクロコントローラ32ビットとcodewarrior
コンパイラのスタートアップコードに取り組んでいます。リンカスクリプトを扱う必要があるためです。 RAM
とstack
の初期化コードで使用されていた特定の変数は、リンカースクリプトに由来します。_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;
リンカースクリプト全体を投稿する必要があります。ところで、私はそれがフラッシュの静的なデータの場所のアドレスだと思います。通常、フラッシュアドレス空間のどこかのセクションとして定義されます。 – LPs
これらの変数は、ブート時にbssセクションに割り当てられた変数の値のコピーを実行するソース(フラッシュ)アドレスとdest(ラム)アドレスのようです(例えばstart.s) – LPs
はい、あなたは同じ仕事をしています。しかし、問題は "_f_data_rom"がフラッシュの間違ったアドレスをフェッチしていることです。 私は心配です、このcommadの '_f_data_rom' 'はどうですか?どのように私はそれがフラッシュの正しいアドレスを取得することを修正することができます。 – waq