質問

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

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

役に立ちましたか?

解決 2

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

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

他のヒント

不可解なリンカー/コンパイラエラーが発生した場合は、必ずすべて再構築を行います。約半分の時間で修正されます。私の推測では、いくつかのモジュールは再コンパイルされるべきだったが、そうではなかった。

がんばって。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top