1

組み込みシステムの場合、別の制御CPUが既知の場所でそれらにアクセスできるように、いくつかのデータ構造を固定アドレスに配置する必要があります。これを実現するために、組み込みターゲットにリンカースクリプトを使用し、さらに制御CPUに同じアドレスの#definesを使用しています。

したがって、これらのアドレス定数がリンカースクリプトとヘッダーファイルの2か所で定義されているのは気になります。1つだけ欲しいのですが。私がこれまでに思いついた最善の解決策は、Makefileにリンカースクリプトでcppを実行させ、同じヘッダーを#includeできるようにすることです。

これを達成するためのより良い方法はありますか?ldのあまり知られていないオプションや、cppを介して自動的に実行されるリンカースクリプトの命名規則はありますか?

4

2 に答える 2

4

これはあなたが探している解決策ではありませんが、1つのオプションはビルドシステムを利用してこれらの値を構成することです。テンプレートとして機能するconfig.h.inとtarget.ld.inを作成し、ビルドシステムに、ビルドするターゲットの正しい定義と正しいアドレスを持つconfig.hとtarget.ldを生成させます。

組み込みシステムにはCMakeを使用しており、このようなことをサポートしています。GNU autoconfもそうですが、私は個人的にそれが本当に好きではありませんでした。

于 2008-09-26T14:17:17.643 に答える
0

emdedded-C 固有の構文 @ を使用して、アドレス空間の任意の場所にオブジェクトを配置できます。

static struct SOMESTRUCT somestruct @ 0x40000000;
extern int someextint @ 0x3ffffffc;
char somebuffer[77] @ 0x80000000;

32 ビット MCU を想定しています。

于 2011-12-07T09:58:44.503 に答える