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:

Back to top