M
M
MWX Library
検索…
EEPROM
TWELITE 無線マイコンの内蔵EEPROMに対して読み書きを実行します。
内蔵EEPROMはアドレス0x000~0xEFFまでの3480バイトが利用可能です。
先頭部分は設定(インタラクティブモード)に利用されるため、併用する場合は後半のアドレスの利用を推奨します。設定(インタラクティブモード)でどの程度の領域を消費するかは、その実装に依存します。最小限度の設定であっても先頭から256バイトまでは利用されるため、それ以降の利用を推奨します。

メソッド

read()

1
uint8_t read(uint16_t address)
Copied!
EEPROMからaddressに対応するデータを読み出します。
エラーの検出は行いません。

write()

1
void write(uint16_t address, uint8_t value)
Copied!
EEPROMからaddressに対してvalueを書き込みます。
エラーの検出は行いません。

update()

1
void update(uint16_t address, uint8_t value)
Copied!
write()と同じく書き込みを行いますが、先にaddressにあるデータを読み出してvalueと違う場合のみ、書き込みを行います。EEPROMの書き換え寿命を考慮し、書換回数を減らしたいときに用います。

get_stream_helper()

1
auto&& get_stream_helper()
2
// 戻り値型は長くなるためauto&&と省略しています。
Copied!
後述のmwx::streamを用いた読み書きを行うために、ヘルパーオブジェクトを取得します。

mwx::streamインタフェースを用いた入出力

stream_helper ヘルパーオブジェクトを経由して、mwx::streamによる演算子やメソッドを用います。mwx::streamを用いるとuint16_tuint32_t型といった整数型の読み書き、uint8_tの固定長配列型の読み書き、format()オブジェクトによる書式整形などが可能になります。
1
auto&& strm = EEPROM.get_stream_helper();
2
// ヘルパーオブジェクトの型名は長くなるためauto&&により解決しています。
Copied!
このオブジェクトに対して<<演算子などmwx::streamで定義されたインタフェースを利用できます。
1
strm.seek(1024); // 1024バイト目に移動
2
3
strm << format("%08x", 12345678); // 12345678を16進数の8文字で記録
4
strm << uint32_t(0x12ab34cd); // 0x12ab34cd の4バイトを記録
5
uint8_t msg_hello[16] = "HELLO WORLD!";
6
strm << msg_hello; // バイト列 "HELLO WORLD!" を記録(終端なし)
7
8
// 結果
9
// 0400: 30 30 62 63 36 31 34 65 12 ab 34 cd 48 45 4c 4c
10
// 0 0 b c 6 1 4 e 0x12ab34cd H E L L
11
// 0410: 4f 20 57 4f 52 4c 44 21 00 00 00 00 ff ff ff ff
12
// O SP W O R L D !
Copied!
.seek()を用いてEEPROMのアドレスを1024に移動しています。
上記では8バイト文字列(00bc614e)、4バイト整数(0x12ab34cd)、16バイトバイト列(HELLO WORLD!...)、1バイト終端文字を書き込んでいます。
1
strm.seek(1024);
2
3
uint8_t msg1[8];
4
strm >> msg1;
5
Serial << crlf << "MSG1=" << msg1;
6
// MSG1=00bc614e
7
8
uint32_t var1;
9
strm >> var1;
10
Serial << crlf << "VAR1=" << format("%08x", var1);
11
// VAR1=12ab34cd
12
13
uint8_t msg2[16]; // "HELLO WORLD!"の文字数
14
strm >> msg2;
15
Serial << crlf << "MSG2=" << msg2;
16
// MSG2=HELLO WORLD!
Copied!
.seek()を用いてEEPROMのアドレスを1024に移動しています。
先ほど書き出したデータ列を読み出します。順番に8バイト文字、4バイト整数、16バイト文字列を>>演算子を用いて読み出します。
最終更新 1yr ago