Arduinoでテストをしていると、スケッチの下に
・「最大2048バイトのRAMのうち、グローバル変数が184バイト(8%)使っていて、ローカル変数で1864バイト使うことができます。」
・「最大32256バイトのフラッシュメモリのうち、スケッチが1514バイト(4%)使っています。」
と出てきました。RAM、フラッシュメモリ、ROM、それぞれ一体何なのか。そして、それらはどのような情報を保存するために使われているのか、ということを中心に説明していきます。
RAM
RAMとはRandom Access Memotyの略で、電源が切れると作業に使用していたデータは消えます。
ROM
ROMとはRead Only Memoryの略で、電源が切れてもデータは消えません。名前の通り、読み出しのみで、書き込みはできません。しかし、書き換えができるものもあります。書き換えることを完全に禁止しているのはマスクROMと呼ばれています。
フラッシュROM
電気的に内容を消去したり書き換えを行うことが可能な不揮発性メモリです。消去が一括で行える機能から「フラッシュ」と名付けられています。
EEPROM
EEPROMは、内容を書き換え可能なROMです。寿命としては、百万回の書き込みも可能となっています。
なぜRAMがなくならないのか
フラッシュROMがあれば、揮発性であるRAMは必要ないのではないかと思いますが、RAMの方が寿命が長いため、メインメモリとして使用されています。フラッシュメモリがRAMの寿命を超えることがあれば、RAMがなくなるかもしれません。
プログラムを書き込む時
プログラムを書き込む時、ROMに書き込まれます。そうでなければ電源がOFFになった時にプログラムが消えてしまって、次に書き込まれるまでその製品は動作しなくなります。
バージョンアップ時
プログラムを書き換えたくなった時、ROMにそのまま書き込んでいくとうまく通信が行えず失敗した場合、そのプログラムは動作不能状態となってしまいます。
そのため、RAMに書き込みを行い、そのあとにEEPROMに書き込みます。