1

ARM用のアセンブラーで小さなモジュールを作成し、ベアメタル組み込みアプリケーションとリンクしました。アプリケーションを再構築しているときに、「エラー[Lp002]:再配置に失敗しました:値が範囲外または不正です」というメッセージが表示されることがあります。さらに不可解なのは、Cモジュールのコードをコメントアウトした後にエラーが発生することです。

IARマニュアルは、「セクションまたはコードの並べ替え」についてあいまいです。しかし、コンパイラによって.cファイルから生成されたアセンブラファイルを見ると、それらのセクション宣言と私のものに違いはありません。私は実際にコードをCでスタブアウトしてから、アセンブルされたファイルを引き継ぐことから始めました。

4

3 に答える 3

1

不明なリンカー/コンパイラ エラーが発生するたびに、Rebuild All を実行します。約半分の時間で修正されます。私の推測では、一部のモジュールを再コンパイルする必要がありましたが、そうではありませんでした。

幸運を。

于 2009-07-30T18:15:45.617 に答える
0

問題の原因と、許容できる回避策を実装する方法を見つけました。私のアセンブラソースには、データセクションとコードセクションがあり、リンカはそれらを離れすぎていました。これで、変数をコードセクション(内部フラッシュへの書き込み中に割り込みコンテキストで実行する必要があるため、RAMに配置されました)に移動し、正しくリンクできるようになりました。

これは残っている質問です:リンカーに特定のセクションを互いに近くに配置するように指示する方法は?

于 2009-08-20T17:53:30.827 に答える
0

コンパイラのドキュメントを参照してください。通常、探しているものを正確に実行するリンカー コマンド ファイルに関するセクションがあります。

于 2009-11-14T11:33:25.237 に答える