2012年4月1日日曜日

AVRのメモリ(SRAM)とプログラムエリア(FLASH)

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 件のコメント:

コメントを投稿