1. メモリ領域ごとに、キャッシュがかかる or かからない、を決定し、有限サイズのキャッシュメモリを有効活用
汎用32ビットマイコンのキャッシュメモリのサイズは数キロバイトと限られているため、特定の処理コード(例:C言語関数)にのみキャッシュがかかるようにしたい、という場合にメモリプロテクションユニット(MPU)が有効です。
下記のようにすると、フラッシュメモリに配置して実行するファームウェアのうち、特定の処理コードのみにキャッシュがかかるようにできます。
(1)キャッシュがかかるようにしたい処理コードをフラッシュメモリの特定のアドレスに配置
(2)フラッシュメモリ全領域を対象にしたMPUリージョン(仮想メモリ領域)を作成し、Non-Cacheable(キャッシュ非対象)に設定
(3)キャッシュがかかるようにしたい処理コードを配置したフラッシュメモリ領域を対象にしたMPUリージョンを作成し、Cacheable(キャッシュ対象)に設定
上記(2)のMPUリージョン番号は、上記(3)のMPUリージョン番号よりも小さくします。
この例を図1に示します。
2. キャッシュ内蔵Cortex-M speculative access(投機的アクセス)によるトラブル回避
Cortex-M7、Cortex-M55、Cortex-M85はキャッシュを内蔵し、speculative access(投機的アクセス)を実行します。投機的アクセスとは、Cortex-Mプロセッサがデータの必要性を予測し、実際に要求される前にメモリからデータを取得してCortex-Mコア内蔵キャッシュに命令やデータを先読みしておく動作です。
下記のような場合に、投機的アクセスがトラブルの要因となることがあります。
Copyright © ITmedia, Inc. All Rights Reserved.
記事ランキング