メモリの再配置
Arm を基本とする多くのプロセッサに共通する機能は、メモリの再配置機能です。メモリコントローラでは、リセット後に、フラッシュのような不揮発性メモリにアドレスのゼロをマッピングするのが一般的です。メモリコントローラを設定することで、RAM をアドレスマップのゼロに配置し、不揮発性メモリをアドレスマップの上位に配置するように、システムメモリを再配置することができます。再配置することで、例外テーブルは RAM に置かれ、ターゲットハードウェアにコードをダウンロードしたときに簡単に修正できます。
メモリコントローラを設定してからアプリケーションコードをダウンロードする必要があります。これを実行する最も良い方法は、コードのダウンロードを行う前に C-SPY マクロ関数のexecUserPreloadを実行することです。マクロ関数__writeMemory32は、メモリコントローラに必要な初期化を実行します。
以下の例では、Microchip AT91SAM7S256 チップでメモリを再配置するために使用するマクロについて示します。同様なしくみは他の Arm ベンダのプロセッサに存在します。
execUserPreload()
{
// REMAP command
// Writing 1 to MC_RCR (MC Remap Control Register)
// will toggle remap bit.
__writeMemory32(0x00000001, 0xFFFFFF00, "Memory");
}注記
C-SPY リセット後にマッピングするメモリの再初期化するには、セットアップマクロexecUserResetを同様に定義する必要があることに注意してください。これは、C-SPY リセットでハードウェアリセットを行うようハードウェアデバッガシステムを設定した(たとえば__hwResetをexecUserResetマクロに追加)場合、必要となることがあります。
C-SPY にマクロファイルをインストールする方法についての詳細は、セットアップマクロとセットアップファイルによる登録と実行を参照してください。使用するマクロ関数の詳細については、C-SPYシステムマクロについてのリファレンス情報を参照してください。