pp.381ff.
avr/pgmspace.h
をインクルードする。- 変数を
const
修飾する。変数の右側にPROGMEM
をつける。 pgm_read_byte()
、pgm_read_word()
の引数はアドレス(ポインタ)。
#define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/pgmspace.h> #include "USART.h" // 文字列をフラッシュメモリーに格納する。 const char String[] PROGMEM = "abcd12340\n"; // 排列をフラッシュメモリーに格納する。 const uint16_t Data[] PROGMEM = {111,222,333,444,555,}; void printString_Progmem(const char *strP){ char oneLetter; while(oneLetter = pgm_read_byte(strP)){ // 取り出した値を変数に代入し、その代入値がnullでない限り、~ transmitByte(oneLetter); strP++; } } /* void printString_Progmem(const char *strP){ char oneLetter; while(1){ oneLetter = pgm_read_byte(strP); if(!oneLetter){ // nullであったら、 break; // ループを抜ける。 } transmitByte(oneLetter); strP++; } } */ int main(){ initUSART(); printString_Progmem(String); int lenOfData = sizeof Data / sizeof Data[0]; for(int i=0; i<lenOfData; i++){ printWord(pgm_read_word(&Data[i])); printString("\n"); } return 0; }