0

ARM によると、Cortex-M3 のデフォルトの動作は、特定のメモリ領域からの実行を防止することです。情報はこちら: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/CIHDHAEF.html

上記の情報ページによると、「オプションのMPUはデフォルトのメモリアクセス動作をオーバーライドできます」。デフォルトで XN の「実行しない」フラグが設定されている実装固有の 0xF0000000 領域からコードを実行したいので、これで問題ありません。

MPU をプログラムしてメモリ領域に追加の制限を加えることができるため、明らかに MPU は機能します。しかし、0xF0000000 領域での実行を許可するように MPU を設定した場合、0xF0000000 で実行しようとすると、CPU は依然として例外に入ります。

ARMページが示唆しているように、Cortex-M3 MPUがデフォルトの制限を解除できるかどうかは誰にもわかりませんか?

4

1 に答える 1

1

おそらくARMのドキュメントには明確に記載されていませんが、MPUを備えたデバイスがデフォルトでMPUを備えていないデバイスと同じように動作するように、デフォルトのMPU構成はすでに可能な限り最も制限が少ないようです。したがって、これらの制限を削除できないことは理にかなっています。

メモリ アクセス動作テーブルは、0xE0100000 ~ 0xFFFFFFFF 領域をメモリ領域ではなく「デバイス」領域として示しています。デバイス領域と通常領域のプロセッサの動作については、 「メモリ領域、タイプ、および属性」で説明されています。デバイス属性がアクセス順序を保持する領域の要件により、プロセッサはコードを実行するときにそのようなメモリを異なる方法で処理する必要があり、プロセッサがより複雑になります。そのようなメモリからの実行も効率が低下します。

基本的に、メモリからの実行をサポートすることが目的の場合は、デバイス領域ではなくメモリ領域にマップする必要があります。

Cortex-R4 のドキュメントでは、制限が明確に述べられていることに注意してください。

Device または Strongly-ordered メモリ タイプ属性を持つ領域から命令を実行することはできません。プロセッサは、そのような領域を XN パーミッションがあるかのように扱います。

しかし、M3 についても同様に明確なステートメントを見つけることができません。

于 2017-06-25T07:22:12.123 に答える