メモリマップデザイナ
概要
.smm
(SolidMemoryMapDesigner 形式) ファイルを編集して、メモリ空間を設定・確認することができます。
SOLIDのMMU設定については ユーザーガイド メモリマップの設定 (MMUの設定) を参照してください。
参考
ここで指定するメモリ属性については メモリ領域種別 を参照してください。予約済みメモリ空間については 定義済みのメモリマップ名 を参照してください。
表示方法
SOLID-IDEで .smm
ファイルを開きます。
.smm
ファイルの置き場所
memory_map.smm
ファイルの置き場所は、目的によって異なる2か所があります。
- ターゲットボードで統一された共通メモリマップを使いたい場合
ターゲットボードの共通メモリマップを使う場合は
solid-os/bsp/ターゲットボードBSP名/drivers/memory_map.smm
に置きます。そのボード向けの共通のファイルですので、一度作れば、他のアプリソリューションは参照するだけで便利です。 一方、書き換えると、ビルドツリー内で、そのボードのBSPを使っている全アプリソリューションが影響を受けることになります。
- アプリソリューション固有のメモリマップを使いたい場合
特定のアプリソリューションで固有のメモリマップを使いたい場合は
solid-os/apps/アプリソリューション名/memory_map.smm
に置きます。 また、アプリソリューションに _pre プロジェクト (solid-os/pre/pre.ptsln
) が含まれている必要があります。この場合は、アプリソリューション固有のファイルですので、修正しても他のアプリソリューションは影響を受けません。
_pre
プロジェクトによる IDE の動作
_pre
プロジェクトをアプリソリューションに含むことにより、IDE は、以下の動作をします。
memory_map.smm
がアプリケーションフォルダに存在すると、アプリケーションフォルダのものを優先使用し、アプリケーションフォルダに無い場合はbsp
フォルダにあるものが使用される。その時点で使用されている
memory_map.smm
が_pre
プロジェクト配下に表示されるので探しやすい。
注釈
memory_map.smm
が更新された際に正しく反映されるよう、bsp
プロジェクトが、_pre
プロジェクトに依存するよう「ビルド依存関係」を設定するのを忘れないようにしてください。
依存関係が無いと、memory_map.smm
を書き換えても、書き換える前の情報が使われてバグになる場合があります。
特定の領域だけ設定を無効にする
左端のチェックボックスで領域の有効無効を切り替えます。
チェックを外した場合、その行はビルド時に無視されます。
属性を自由に設定する
属性のドロップダウンから SOLID_DIRECT
を選択し、設定したい属性を有効にします。
属性名は先頭に SOLID_MEM_ATTR_
を付けたものに対応しています。(READONLY なら SOLID_MEM_ATTR_READONLY
)
属性の詳細については メモリ属性 を参照してください。
4GB以上の物理アドレスを設定する
上部のツールバーから Mappable Areas Table に切り替えます。
拡張したい領域を定義します。
拡張したエリアにメモリを割り当てます。
物理アドレス制限の設定
物理アドレスをあらかじめ設定しておくことで、設定したメモリ領域がはみ出ていないか確認できます。
上部のツールバーから Mappable Areas Table に切り替えます。
この表で設定したエリアの範囲外にメモリ空間が存在する場合、.smm
ファイルの保存に失敗します。
マルチ OS 環境等で、SOLID-OS では使えない物理アドレス領域を明示的に示す
マルチOS環境 (例えば、Linuxとの共存環境) 等で、SOLID-OSでは使ってはいけない物理メモリアドレスを明示的に指定するには、 Attribute の項目に、プルダウンメニューで表示される以外の文字列を入力します。これにより、メモリマップ編集中に 、誤って使ってはいいけない物理アドレス領域を指定したことを簡単に認識できます。
これらエントリは、.smm
形式ファイルにのみ追加され、ビルド時に出力されるソースには反映されません。
SOLID-OS管理外の領域ですので、 Virtual Address には、 NO_ADDRESS
を指定します。
アドレスサニタイザの設定
アドレスサニタイザの監視領域の設定もメモリマップデザイナで行うことができます。
SOLIDのアドレスサニタイザの詳細については ユーザーガイド アドレスサニタイザ を参照してください。