特定の .c ファイルの変数を特定の RAM の場所に格納する必要があります。これを実現するにはどうすればよいですか。ARM 用の IAR IDE を使用しています。
私がそうしたい理由は、コンパイラがARMコアのビットバンドSRAM領域に変数を格納するときに、変数を正しく読み取ることができないためです。コードの一部のセクションにコメントすると、コンパイラはそれらを非ビットバンドSRAM領域に格納し、正しい結果が観察されます.
特定の .c ファイルの変数を特定の RAM の場所に格納する必要があります。これを実現するにはどうすればよいですか。ARM 用の IAR IDE を使用しています。
私がそうしたい理由は、コンパイラがARMコアのビットバンドSRAM領域に変数を格納するときに、変数を正しく読み取ることができないためです。コードの一部のセクションにコメントすると、コンパイラはそれらを非ビットバンドSRAM領域に格納し、正しい結果が観察されます.
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
コンパイラ固有のものであると期待しています@
が、コードに隠れて目立たない.