1

特定の .c ファイルの変数を特定の RAM の場所に格納する必要があります。これを実現するにはどうすればよいですか。ARM 用の IAR IDE を使用しています。

私がそうしたい理由は、コンパイラがARMコアのビットバンドSRAM領域に変数を格納するときに、変数を正しく読み取ることができないためです。コードの一部のセクションにコメントすると、コンパイラはそれらを非ビットバンドSRAM領域に格納し、正しい結果が観察されます.

4

1 に答える 1

2

EWARM を使用すると、いくつかのメソッドで変数を配置できます。を使用して特定のアドレスに配置できます@IAR のサポート サイトから:

const char RELEASEDATE[16] @ 0x0000FF10 = __DATE__ ;
const char RELEASETIME[16] @ 0x0000FF20 = __TIME__ ;

別の方法として、location プラグマを使用して、セクション内の変数を見つけることができます (これは目的のように聞こえます)。同じソースから:

#pragma location = "ConstSection1"
__root const char RELEASEDATE[16] = __DATE__ ;
#pragma location = "ConstSection2"
__root const char RELEASETIME[16] = __TIME__ ;

リンカー ファイル ( .icf) には、次のように記述します。

place at address mem: 0x0000FF10    { readonly section ConstSection1 };
place at address mem: 0x0000FF20    { readonly section ConstSection2 };

オペレーターが場違いに見えるので#pragma、私は を好みます。@さらに、コードを読んでいる人は、#pragmaコンパイラ固有のものであると期待しています@が、コードに隠れて目立たない.

于 2013-10-28T06:19:13.683 に答える