본문으로 바로가기

아두이노 EEPROM에 구조체 저장

category 프로그래밍/아두이노 2020. 5. 11. 23:49

MPU 종류  /  용량 크기

ATmega128 : 4KiB

ATmega328 : 1KiB

ATmega2560 : 4KiB

ATmega16u2 : 0.5KiB

ATmega32u4 : 1KiB
ATmega4809/4808 : 0.25KiB(256Byte)

 

 

 

코드

#include <EEPROM.h>

struct S_test {
    unsigned int num; // 1 Byte
    char name[24]; // 24 Byte (한글은 1글자 = 3 Byte이다)
};

void setup() {
    Serial.begin(9600);
    // 구조체의 크기를 측정
    Serial.println(sizeof(S_test)); 
    
    // 구조체 선언 후 값 할당
    S_test t1 = {1, "테스트글자입니다"};
    S_test t2 = {2, "코모클라우드"};
    S_test t3 = {3, "환영합니다!"};
    
    // EEPROM에 구조체 저장 (측정한 구조체의 Byte 크기에 맞게 값을 설정한다)
    EEPROM.put(0, t1);
    EEPROM.put(26, t2);
    EEPROM.put(52, t3);
    
    // 저장한 데이터를 받아올 구조체 선언
    struct S_test a, b, c;
    
    // EEPROM에서 데이터 읽어온 후 구조체에 저장
    EEPROM.get(0, a);    
    EEPROM.get(26, b);    
    EEPROM.get(52, c);
    
    // 구조체 출력
    Serial.println((String) "00:" + a.num + ", " + a.name);
    Serial.println((String) "26:" + b.num + ", " + b.name);
    Serial.println((String) "52:" + c.num + ", " + c.name);
}

void loop() {
}

* 구조체의 크기가 홀수 바이트인 경우, Padding해서 짝수 바이트로 만든다. 위의 경우도 구조체의 변수는 총 25Byte지만, Padding해서 26Byte로 만들었다.

 

 

실행 결과