開発のヒント

周辺機能、I/O、メモリ

FlashのRWW (Read While Write)

データシート等のマニュアルに「RWW可能」と記載してあるSTM32はFlashから命令を実行中に、Flashにデータを書き込むことができます。

しかし、いくつかのSTM32は、Flashから命令を実行中にFlashにデータを書き込むことができません。

STM32では、Flashにはコードエリアとデータエリアの区分が無く、どこにでも命令とデータを置くことができるのですが、一部の製品では、ハードウエア的にメモリマップと内部バスが共通になっているため、命令実行とデータ書き込みは同時実行ができません。

しかし、RAM上で命令を実行していれば、Flashにデータを書き込むことは可能です。

STM32シリーズはRAM上で命令を実行できます。RAMとFlashは異なるハードウエアですので、RAMの命令を実行中にFlashにデータを書き込む事ができます。

ただし、RAMはFlashほどメモリ容量が大きくないため、メインルーチンを含む全てのコードを置くことはできません。

そのため、Flashにデータを書き込むコードを関数(サブルーチン)化し、それだけをRAM上に置き、Flashにデータを書きたいときだけコールすれば、容量の大きいメインルーチンはFlashに置くことができ、通常のプログラムコードと同じ扱いが可能です。

過去の開発のヒントはこちら