メディア

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

» 2025年10月31日 10時00分 公開
解説します

キャッシュ動作管理

 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.

特別協賛PR
スポンサーからのお知らせPR
Pickup ContentsPR
Special SitePR
あなたにおすすめの記事PR

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.