\ Amazon プライム感謝祭 10/19(土)~10/20/(日) /

Arduino 入門 番外編 11 【搭載メモリについて】(Flash SRAM EEPROM)

arduino-extra-edition-11 Arduino番外編
記事に広告(アフィリエイト広告)が含まれています。
スポンサーリンク

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万回とされています。

 

公式サイトのサンプルコードを記載しておきます。

Arduinoの公式サイトは
Creative Commons Attribution-ShareAlike 3.0 Licenseに従っています。
下記サンプルコードも同様のライセンスに従います。

といっても上記リンクをご確認いただければ、わかりますがほぼ自由に使えます。

 

 

サンプルコード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-ide-basic-environment-02

 

 

上記の環境設定については下記記事で詳細を説明しています。

 

まとめ

Arduino 入門 番外編 11】搭載メモリについて(Flash SRAM EEPROM)

いかがだったでしょうか?

 

Arduinoに色んなことをさせようとしてスケッチが巨大化。

プログラムが転送できない!

転送はできたけど、メモリーを消費しすぎて動かない!

なんて、ことがないようにメモリお消費を意識してスケッチを書いていきましょう。

 

次回の番外編は、【電源供給方法】について情報を発信したいと考えています。

Arduino 入門 番外編 12 【電源供給方法】
Arduinoへの電源供給は一般的に、USBと外部電源の2通りの給電方式があります。本記事では、Arduinoの給電方式について解説しています。使用する電子部品の電力を確認して、Arduinoから供給する電力で足りているか確認するようにしま…

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れ、間違いなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編Arduino入門編2で使用しているUNOはAmazonにて購入可能です。

Arduino入門編では互換品を使用。

Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)

 

Amazonでお得に買う方法

Amazonでお得に購入するならAmazon MastercardAmazonギフト券がおすすめです。

時期により異なりますが、様々なキャンペーンを実施しています。

\Amazonギフト券/
Amazonギフトカード キャンペーン

Amazon Mastercard お申込み
Amazon Mastercard 申し込み 

 

いずれの場合もプライム会員である方がお得!!

\Amazon Prime 30日間の無料会員を試す/
無料会員登録 

 

 

コメント

タイトルとURLをコピーしました