フォト
2018年5月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
無料ブログはココログ

« アクティブマトリクス蛍光表示管の実験用表示モジュールの試用 (2) | トップページ | ノートPCの潰れた(なめた)ねじを外すのに苦戦 »

2018年2月17日 (土)

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」カテゴリの記事

AVR」カテゴリの記事

コメント

Hello. And Bye.

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/66402677

この記事へのトラックバック一覧です: Arduino Unoの内部EEPROMの利用(書込みの高速化)に関するメモ:

« アクティブマトリクス蛍光表示管の実験用表示モジュールの試用 (2) | トップページ | ノートPCの潰れた(なめた)ねじを外すのに苦戦 »