質問
組み込みシステムの場合、いくつかのデータ構造を固定アドレスに配置して、別の制御CPUが既知の場所でそれらにアクセスできるようにする必要があります。これを実現するために、組み込みターゲットのリンカースクリプトを使用し、さらに制御CPUの同じアドレスの#definesを使用しています。
したがって、これらのアドレス定数は、リンカースクリプトとヘッダーファイルの2か所で定義されているのが気になります。ひとつだけ欲しいです。これまでに思いついた最善の解決策は、Makefileでリンカースクリプトでcppを実行し、同じヘッダーを#includeできるようにすることです。
これを達成するためのより良い方法はありますか? ldにあまり知られていないオプションや、cppを介して自動的に実行されるリンカースクリプトの命名規則はありますか?
解決
これはあなたが探している解決策ではありませんが、1つのオプションはビルドシステムを利用してこれらの値を構成することです。テンプレートとして機能するconfig.h.inおよびtarget.ld.inを作成し、ビルドシステムに、正しい定義のconfig.hと、ビルドするターゲットの正しいアドレスのtarget.ldを生成させます。
私たちは組み込みシステムにCMakeを使用しており、このようなことをサポートしています。 GNU autoconfも同様ですが、私は個人的にそれが本当に好きではありませんでした。
他のヒント
埋め込みC固有のコンストラクト@を使用して、アドレス空間の任意の場所にオブジェクトを配置できます。
static struct SOMESTRUCT somestruct @ 0x40000000;
extern int someextint @ 0x3ffffffc;
char somebuffer[77] @ 0x80000000;
32ビットMCUを想定しています。
所属していません StackOverflow