Arduino で PROGMEM を使ってみる。
PROGMEM とはフラッシュメモリにデータを格納するためのものでarduino unoなどのSRAMは容量が小さいため、 大きなデータはPROGMEMを使ってフラッシュメモリから読み込むことが出来るようになります。
PROGMEMは変数を初期化する時に使用する。
const char variablename[] PROGMEM ={};
ビットマップfontデータを font_hira.hファイルに記述してPROGMEMデータとして定義
const byte hira[][8] PROGMEM = { //ぁ {0b00000000, 0b00010000, 0b00111100, 0b00010000, 0b00111100, 0b01011010, 0b00110010, 0b00000000, }, //あ {0b00100000, 0b01111100, 0b00100000, 0b00111100, 0b01101010, 0b10110010, 0b01100100, 0b00000000, }, //ぃ {0b00000000, 0b00000000, 0b01001000, 0b01000100, 0b01000100, 0b01010000, 0b00100000, 0b00000000, }, //い {0b00000000, 0b10001000, 0b10000100, 0b10000010, 0b10000010, 0b01010000, 0b00100000, 0b00000000, }, //ぅ {0b00000000, 0b00111000, 0b00000000, 0b00111000, 0b01000100, 0b00001000, 0b00110000, 0b00000000, }, //う {0b00111100,
PROGMEMデータを読み込む
PROGMEMデータをプログラム中で利用するには pgm_read_byte() 命令を使って指定したPROGMEM格納領域からデータを1バイトずつ読み込みます。
#include "font_hira.h" void progmem(void) { for (byte i = 0 ; i < 3 ; i++) { byte buf1[30]; for (byte ii = 0 ; ii < 8 ; ii++) { buf1[ii] = pgm_read_byte(hira[i] + ii); Serial.println(buf1[ii], BIN); } Serial.println(""); } } void setup() { Serial.begin(115200); progmem(); } void loop() { }
プログラム結果の表示
上記プログラムの実行結果、単純にfont_hira.hのデータを読み取って表示しただけです。
0 10000 111100 10000 111100 1011010 110010 0 100000 1111100 100000 111100 1101010 10110010 1100100 0 0 0 1001000 1000100 1000100 1010000 100000 0 -----
created: