gcc-arm-none-eabiで変数を指定したセクションに配置する
LPC54102を使用していて躓いたのでメモ。
Cortex-M系のMCUを積んだマイコンなら同様にできると思う。
attribute((section("name")))の使い方について。
MCUXpresso上ではLPC5102のメモリはPROGRAM_FLASHとSRAM[0-2]が設定されているが、変数を任意のSRAMに配置しようとしたとき、 attribute((section("SRAM1")))のように指定してもなにも変化がない。
ここのnameに入れるべきは、以下のリンカスクリプトにある.data.$RAM2という文字列である。
/* DATA section for SRAM1 */ .data_RAM2 : ALIGN(4) { FILL(0xff) PROVIDE(__start_data_RAM2 = .) ; *(.ramfunc.$RAM2) *(.ramfunc.$SRAM1) *(.data.$RAM2*) *(.data.$SRAM1*) . = ALIGN(4) ; PROVIDE(__end_data_RAM2 = .) ; } > SRAM1 AT>PROGRAM_FLASH
リンカスクリプト上で、*(.data.$RAM2) と記述されている箇所は、最初のアスタリスクですべてのオブジェクトファイルを対象にしている。 二つ目のアスタリスクはセクション名のワイルドカード?軽く調べてもあまり分かりやすい説明がなかった。
つまりは__attribute__((section(".data.$RAM2")))
とするべきのようだ