Arduino Unoの内部EEPROMの利用(書込みの高速化)に関するメモ
Arduino Unoの内部EEPROMへのデータ書き込みに関するメモです。
先日の「豊四季タイニーBASIC for MW25616L実験用表示モジュール」の実装で、
プログラムを内部EEPROMに保存しています。
方法としては、Arduino標準クラスライブラリEEPROM を使っています。
(Arduino リファレンス - EEPROM Library)
#include <EEPROM.h> // 内部EEPROMメモリへの保存 topAddr = EEPROM_PAGE_SIZE*prgno; for (uint16_t i=0; i < SIZE_LIST; i++) { EEPROM.write(topAddr+i,listbuf[i]); }
512バイトのデータ書き込みは、上のような感じでやっています。
クラスライブラリEEPROM は1バイト単位でしか書き込みが出来ないためか、
書込みに時間がかかります(感覚的に2,3秒くらい?)。
改善策はないかと、EEPROM.h のソースを読むと、
#include <avr/eeprom.h> を読み込んでおり、内部EEPROM用のAPIが存在することが
分かりました。
eeprom.hのソースを読むと、ブロック単位の書込みが行えるAPI等色々と用意されています。
内部EEPROM用のAPIを使う方法に修正しました。
#include <avr/eeprom.h> // 内部EEPROMメモリへの保存 topAddr = EEPROM_PAGE_SIZE*prgno; eeprom_update_block(listbuf,topAddr,SIZE_LIST);
書込みには下記のAPIを使っています。
void eeprom_update_block (const void *__src, void *__dst, size_t __n);
試してみると、ほぼ瞬時に書き込みを行うことが出来ました。
コードも短くなり、フラッシュメモリの消費量も減りました。
内部EEPROM用のAPIは、#include <avr/eeprom.h> でヘッダーファイルをインクルード
することで利用出来ます。
クラスライブラリEEPROM を使うよりも、APIを使った方がお手軽に利用できます。
用意されているAPIはeeprom.hを直接覗いてみれば確認できます。
arduino-1.8.5\hardware\tools\avr\avr\include\avr\eeprom.h
« アクティブマトリクス蛍光表示管の実験用表示モジュールの試用 (2) | トップページ | ノートPCの潰れた(なめた)ねじを外すのに苦戦 »
「arduino」カテゴリの記事
- Freenove Mecanum ホイール カー キットを購入しました(2025.05.28)
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
「AVR」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用SJIS漢字フォントライブラリ SDカード版を作成しました(2018.10.30)
- ATtiny13AでI2C接続キャラクタLCDを利用する(4)(2018.04.16)
- ATtiny13Aで赤外線リモコン受信センサーを使う(2)(2018.04.15)
- ATtiny13AでHC-SR04を使った距離計測(2018.04.14)
コメント
« アクティブマトリクス蛍光表示管の実験用表示モジュールの試用 (2) | トップページ | ノートPCの潰れた(なめた)ねじを外すのに苦戦 »
Hello. And Bye.
投稿: Kealllodimpaick | 2018年2月27日 (火) 01時44分