検索
連載

Arm Cortex-Mのメモリプロテクションユニット(MPU)って何?Q&Aで学ぶマイコン講座(108)(2/5 ページ)

マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初級〜上級者の方からよく質問される「Arm Cortex-Mメモリプロテクションユニット(MPU)のメリット」について解説します。

Share
Tweet
LINE
Hatena
解説します

キャッシュ動作管理

 1. メモリ領域ごとに、キャッシュがかかる or かからない、を決定し、有限サイズのキャッシュメモリを有効活用

 汎用32ビットマイコンのキャッシュメモリのサイズは数キロバイトと限られているため、特定の処理コード(例:C言語関数)にのみキャッシュがかかるようにしたい、という場合にメモリプロテクションユニット(MPU)が有効です。

 下記のようにすると、フラッシュメモリに配置して実行するファームウェアのうち、特定の処理コードのみにキャッシュがかかるようにできます。

(1)キャッシュがかかるようにしたい処理コードをフラッシュメモリの特定のアドレスに配置

(2)フラッシュメモリ全領域を対象にしたMPUリージョン(仮想メモリ領域)を作成し、Non-Cacheable(キャッシュ非対象)に設定

(3)キャッシュがかかるようにしたい処理コードを配置したフラッシュメモリ領域を対象にしたMPUリージョンを作成し、Cacheable(キャッシュ対象)に設定

 上記(2)のMPUリージョン番号は、上記(3)のMPUリージョン番号よりも小さくします。

 この例を図1に示します。

<strong>図1:特定のFLASH領域をキャッシュ対象にする</strong>
図1:特定のFLASH領域をキャッシュ対象にする[クリックで拡大]

 2. キャッシュ内蔵Cortex-M speculative access(投機的アクセス)によるトラブル回避

 Cortex-M7、Cortex-M55、Cortex-M85はキャッシュを内蔵し、speculative access(投機的アクセス)を実行します。投機的アクセスとは、Cortex-Mプロセッサがデータの必要性を予測し、実際に要求される前にメモリからデータを取得してCortex-Mコア内蔵キャッシュに命令やデータを先読みしておく動作です。

 下記のような場合に、投機的アクセスがトラブルの要因となることがあります。

  • 有効なメモリ領域と予約領域が連接している
  • 有効なメモリ領域がキャッシュ対象
  • 有効なメモリ領域の終端付近のアドレスにアクセスし、プロセッサがデータの必要性を予測し、実際に要求される前に、有効なメモリ領域に連接する予約領域に対して、投機的アクセスを実行してしまった場合

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る