ユーザーおよびプログラム メモリとは、コンパイルされた実行ファイルの実行に必要なメモリすべてを指します。命令、読み出し専用データ、読み出し/書き込みデータ、プログラム スタック、プログラム ヒープの保存に使用されます。これらのセクションは、システム内のアドレス指定可能なメモリであればどこにでも保存できます。デフォルトでは、コンパイラで生成されたコードおよびデータは、予約済みメモリ の表にリストされているアドレスから開始して、そこから連続するアドレスのメモリ ロケーションに保存されます。これが最も一般的なプログラムのメモリ レイアウトです。プログラムの開始位置を変更するには、リンカーで MicroBlaze の場合は _TEXT_START_ADDR
シンボル、Arm の場合は START_ADDR
シンボルを定義します。
ELF ファイルのセクションをそれぞれ異なるメモリに分割する必要がある場合は、リンカー コマンド言語を使用します。詳細は、リンカー スクリプトを参照してください。実行ファイルのメモリ マップを変更するのは、次のような場合です。
- 長いコードを複数の小型メモリに分割する場合
- 頻繁に実行されるセクションを高速メモリにマップする場合
- 読み出し専用セグメントを不揮発性のフラッシュ メモリにマップする場合
実行ファイルの分割方法に制限はありません。分割は、出力セクション レベルまたは関数レベル、データ レベルで実行できます。生成される ELF ファイルが連続しておらず、メモリ マップにギャップが存在することがあります。予約済みロケーションを使用しないよう注意してください。
または、ツールで提供される予約済みメモリ ロケーションのデフォルト バイナリ データを変更することも可能です。この場合、リンカーで提供されるデフォルトのスタートアップ ファイルおよびメモリ マップを置き換える必要があります。