0

私は GNU リンカ スクリプト ファイルを作成していますが、次の問題について正しい方向へのナッジが必要です。

リンカー スクリプトが作成されているデバイスには、テキストとロデータをホストするためのフラッシュがあります。また、データと BSS をホストするための SRAM も備えています。

私はリンカー スクリプトのバリアントを作成しました。

これらは正常に動作します。

ここで、TEXT の大部分が Flash に含まれるリンカー スクリプトのバリアントを作成する必要があります。ただし、既知のサフィックスで終わる名前を持つ特定のルーチンは、SRAM にロードされます。

たとえば、Func1IRAMCode() と Func2__IRAMCode() を SRAM セクションにロードし、IRAMCode サフィックスを持たない他のすべての関数をフラッシュにロードする必要があります。

移植性の理由から、これらの SRAM 関数には属性 (セクション) を付けません。

ここでつまずきます。テキスト セクションには次のルールがあります。

.text :
{
*(.text .text.* .gnu.linkonce.t.*);
} > FLASH

.Misc :
{
* (.text.*IRAMCode);
} > SRAM

.data セクションと .bss セクションは別々に定義されます。

問題は、*IRAMCode() が割り当てられたフラッシュ アドレスを取得していることです。

テキスト セクションから *IRAMCode を除外する構文は何ですか?

プロジェクトでこの問題をどのように解決しましたか?

4

1 に答える 1

0

これを行う方法は、関数を別のセクション (たとえば .sram.text ) に配置することです。これを行うには、特定の関数ごとに gcc の section 属性を使用します (例: : __attribute__ (( section ".sram.text"))。

したがって、希望するセクションを SRAM にワイルドカードするのは非常に簡単です。

于 2012-08-26T14:26:55.603 に答える