Arduino 入門
番外編 11
【搭載メモリについて】
(Flash SRAM EEPROM)
arduino 入門 番外編はarduinoの基本的なことを解説している記事です。
本日は、Arduinoのメモリについて。
Arduinoに複雑なことをさせようとすると、スケッチ(コード、プログラム)がどんどん複雑になっていきます。
そして、スケッチ(コード、プログラム)が巨大化。
ついにはメモリ不足といった事態に陥ります。
入門編程度のスケッチ(コード、プログラム)で遊んでいる分にはメモリ不足になるということはないでしょう。
ある程度、慣れてきて色々し始めると直面することに・・・。
そのため、Arduinoのメモリについて前もって知っておくことが大事です。
それでは、arduino自身のこと、スケッチ(コード、プログラム)を少しづつ理解して行きましょう。
いやいや、arduinoを早速始めたいんだ!というかたは下記の入門編からお読みください。
Arduino入門編の解説にて使用しているArduinoは互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Arduino メモリの種類について【ATmega328P】
Arduinoボードのマイクロコントローラ(ATmega328P)には3種類のメモリがあります。
※2019年7月現在のUNO情報
メモリ種類 | サイズ[バイト] | 用途 |
---|---|---|
Flashメモリ 不揮発性 |
32k | スケッチの格納 |
SRAM 揮発性 |
2k | スケッチの実行中、変数の作成と操作に一時的に利用 |
EEPROM 不揮発性 |
1k | 長期的に情報を記録 |
Flashメモリ
Flashメモリーは、スケッチ(コード、プログラム)が格納される場所です。
IDEで作成したスケッチが格納されているメモリーとなります。
Arduinoを使っていれば、わかると思います。
Arduinoの電源を落とします。
もう一度、電源を入れても書き込んだスケッチをそのまま動かすことができます。
それは、スケッチが不揮発性メモリであるFlashメモリに格納されているからです。
Flashメモリには、ブートローダと呼ばれる基本ソフトは初めから書き込まれています。
そのため、Arduinoの電源を入れると、このブートローダが起動されます。
その後、スケッチを起動します。
Windowsがパソコンにあらかじめインストールされていて、電源を入れるとWindowsが起動するのと、まあ似たようなものです。
SRAM
SRAMはスケッチの実行中、変数の作成と操作に一時的に利用されます。
メモリのサイズは小さいです。
ただし、他のメモリに比べ読み書きする動作速度は高速なメモリです。
また、揮発性メモリのなため電源を落とすと情報は失われます。
メモリサイズが小さいため、プログラムを作成する際はSRAMのメモリサイズを意識する必要があります。
とくに、文字列や配列を使用する場合はメモリがすぐになくなってしまうため気を付ける必要があります。
例えば、文字は1文字につき1バイト使用します。
100文字なら100バイトというようにあっというまにメモリを消費してしまいます。
※SRAMのサイズは2kバイトです。
ちなみに、下記で26バイト消費します。
char message[] = "abcdefghijklmnopqrstuvwxyz";
EEPROM
EEPROMは長期的に情報を格納しておく場所です。
EEPROMは不揮発性のメモリのため、電源がOFFの場合でもメモリ上の情報を保持できます。
このEEPROMを使用するためには、ライブラリを使用するのが簡単です。
Arduino IDE上に利用可能なEEPROMライブラリがあります。
EEPROMの性能は、書き込み時間が1バイト/3.3ms、サイクル寿命は10万回とされています。
公式サイトのサンプルコードを記載しておきます。
といっても上記リンクをご確認いただければ、わかりますがほぼ自由に使えます。
サンプルコード1
//EEPROMの値を0番地から純に1バイトずつ読み取り、シリアルで送信。 #include <EEPROM.h> //IDEに標準に搭載されているライブラリ int a = 0; int value; void setup() { Serial.begin(9600); } void loop() { value = EEPROM.read(a); //EEPROMから1バイト読み込み。 Serial.print(a); Serial.print("\t"); Serial.print(value); Serial.println(); a = a + 1; if (a == 512) a = 0; delay(500); }
サンプルコード2
// EEPROMのアドレス0から511に、addressと同じ値を書き込みます。 #include <EEPROM.h> //IDEに標準に搭載されているライブラリ void setup() { for (int i = 0; i < 512; i++) EEPROM.write(i, i); //EEPROMから1バイト書き込み。 } void loop() {}
EEPROMライブラリの関数説明
#include <EEPROM.h>
関数名 | 説明 |
---|---|
EEPROM.read(address) | address:読み取る位置。0以上の値(int) 戻り値:指定したアドレスの値(byte) |
EEPROM.write(address, value) | address:書き込む位置。0以上の値(int) value:書き込む値。0から255(byte) 戻り値:なし |
メモリー消費量の確認
コンパイル時、書き込み時にメモリーの状況を確認できます。
IDEの統合環境から
「ファイル」⇒「環境設定」を選択
下記図の⑥の部分の「コンパイル」と「書き込み」に✔を入れてください。
上記の環境設定については下記記事で詳細を説明しています。
まとめ
【Arduino 入門 番外編 11】搭載メモリについて(Flash SRAM EEPROM)
いかがだったでしょうか?
Arduinoに色んなことをさせようとしてスケッチが巨大化。
プログラムが転送できない!
転送はできたけど、メモリーを消費しすぎて動かない!
なんて、ことがないようにメモリお消費を意識してスケッチを書いていきましょう。
次回の番外編は、【電源供給方法】について情報を発信したいと考えています。

最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント