Nios® V プロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 7/08/2024
Public
ドキュメント目次

7.13.2.2. 高度な配置オプション

プログラム・ソース・コードでは、各データまたはコードのターゲット・メモリー・セクションを指定できます。C または C++ では、section 属性を使用できます。この属性は、関数プロトタイプに配置する必要があり、関数宣言自体に配置することはできません。

特定のメモリーセクションへの C コードの手動割り当て

/* data should be initialized when using the section attribute */ int foo __attribute__ ((section (".ext_ram.rwdata"))) = 0; void bar (void) __attribute__ ((section (".sdram.text"))); void bar (void) { foo++; }
注: 変数 ext_ramext_ram という名前のメモリーに配置され、関数 bar()sdram という名前のメモリーに配置されます。

アセンブリーでは、section ディレクティブを使用してこれを行います。たとえば、次の行以降のコードはすべて ext_ram という名前のメモリーデバイスに配置されます。

.section .ext_ram.text 

セクション名の ext_ramsdram は例です。ハードウェアに対応するセクション名を使用する必要があります。

セクション名を作成する際、次の拡張子を使用します。
  • コードには .text を使用します。例: .sdram.text
  • 読み取り専用データには .rodata を使用します。例: .cfi_flash.rodata
  • 読み取り/書き込みデータには .rwdata を使用します。例: .ext_ram.rwdata

    これらの機能の使用方法の詳細については、GNU コンパイラーとアセンブラーのドキュメントを参照してください。

注: リンカー・メモリー・マップを操作する強力な方法は、BSP Editor を使用することです。 BSP Editor を使用すると、リンカーセクションを特定の物理領域に割り当てた後、未使用またはオーバーラップしている領域を示すメモリーのグラフィック表示を確認できます。