定数データをプログラム領域(フラッシュメモリー)に書き込む、読み出す / 続き

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;
}

f:id:ti-nspire:20200221125446p:plain