PIC32MXのメモリ構成


【メモリマップ】

PIC32MXファミリのメモリはすべてを1つのアドレス空間で構成しており、下図の
ような構成になっています。
 全体は左側の物理メモリで表される4Gバイトという広大な空間となっていますが、
実メモリは下位の0.5Gバイトの空間内にRAMもフラッシュメモリもすべて割り付け
られています。

 実際のプログラム空間としては、下図の右側の仮想メモリとして扱われ、
上位2Gバイトと下位2Gバイトに2分されています。
 これはRTOSを使った場合に、RTOSを実装するカーネル領域(上位側)とユーザー
アプリを実装するユーザー領域(下位側)と分離するためにあります。
 カーネル領域からはどこでもアクセス可能ですが、ユーザー領域からは他の領域は
直接アクセスできず、RTOS経由でアクセスすることになります。
 このようにすることでRTOSを使った場合にRTOSの頑強性を強くすることができる
ようになっています。
 さらに上位のカーネル領域はKSEG0からKSEG3という0.5Gバイト単位の4つの領域に
分割されていて、通常はKSEG0とKSEG1が使われ、いずれも同じ物理メモリ空間を
アクセスします。 この2つの差異はキャッシュされるか、されないかの違いになります。
 特に指定しない場合には、KSEG0領域にプログラムがあるものとして扱われ実行
されます。つまり通常の使い方ではキャッシュが有効なKSEG0を使って動かすことに
なります。
ただし、デフォルトではキャッシュはすべて無効になっていて、指定しない限りキャッシュ
は有効になりません。




 リセットベクタとスタートアップコード、および周辺I/O(つまりSFR)はKSEG1の領域
にしかありません。
したがって、通常のプログラム実行はまずKSEG1から始まり、スタートアップコード
を実行したところでKSEG0に切り替えられてから実行されます。


   目次ページへ