最終更新:2010-03-15 (月) 12:33:30 (5149d)  

PROGMEM
Top / PROGMEM

http://www.arduino.cc/en/Reference/PROGMEM

メモ

Arduino で使用されている ATmega168, ATmega328 等のマイクロコントローラーには 1KB ないしは 2KB 程度の容量の SRAM しか搭載されていない。そこでちょっとした量のデータを扱おうとすると,すぐにメモリが足りなくなってしまう。

これに対して,プログラム格納用のフラッシュメモリの方は 16KB ないしは 32KB と比較的余裕がある。メモリを節約するには,なるべくこちらの方へデータを格納するようにしなくてはいけない。

ただ,例えば配列に const 修飾子を付けたりしただけでは,データをフラッシュメモリ側に置くことはできない。これを実現するには PROGMEM と呼ばれる仕組みを利用する必要がある。

// 配列をフラッシュメモリ側に持つ
PROGMEM prog_uint16_t wordArray[]  = {0x1111, 0x2222, 0x3333, 0x4444};

// wordArray[2] を読み出す
uint16_t word = pgm_read_word_near(wordArray + 2);

参考