AVRではメモリ(SRAM)とプログラムエリア(FLASH)が区別される。
SRAMの容量は限られている(ATMega64Aでは4KBしかない)。その上、スタックなどにも使われる。
そこでプログラム中の文字列定数などはFLASHに置きたいが、
普通にCで書くとSRAMに置かれてしまうらしい。
1.PSTR
プログラム中ではPSTRマクロを使って文字列定数を書くことでFLASHにおいてくれる
char* flash_addr = PSTR("constant string on FLASH.");
こんな感じ
2.PROGMEM
avr/pgmspace.hをインクルードし、PROGMEMを頭につけることでFLASHに置いてくれる
PROGMEM char str[] = "some string";
3.PRG_RDB
上記で読み出すときはpgm_read_byteを使用
char c = pgm_read_byte(&str[i]);
0 件のコメント:
コメントを投稿