프로그래밍/Arduino

[아두이노] EEPROM byte 읽기/쓰기

Beginner:) 2021. 1. 26.
320x100

 

EEPROM이란 아두이노 보드(마이크로컨트롤러)가 꺼져도 값이 유지되는 저장공간입니다.

 

EEPROM에는 512 byte의 EEPROM이 있습니다. 

 

 

 

1. 헤더불러오기

#include <EEPROM.h>

먼저 EEPROM을 사용하려면 해당 헤더를 불러와야합니다.

 

2. 값 쓰기

EEPROM.write(address,value);

첫번째 매개변수 address에는 주소값(0~512) 

두번째 매개변수 value에는 byte 값(0~255)를 씁니다.

 

EEPROM.update(address, value);

EEPROM.update란 EEPROM.write와 유사하지만 

EEPROM.wirte 경우 3.3ms 시간이 걸리는데 이는 꽤 긴시간입니다.

EEPROM.update를 사용할 경우 값을 쓰기전에 해당주소의 값과 내가 쓸 값이 같을경우 연산을 수행하지 않아 시간을 절약할 수 있습니다.

 

3. 값 읽기

EEPROM.read(address);

EEPROM.write 와 같이 byte 값(0~255)를 읽어올 수 있습니다.

 

4. 정리

#include <EEPROM.h>

void setup()
{
  Serial.begin(9600);
  int address = 0;
  int value = 10; //  0부터 255까지 byte 값.
  
  EEPROM.write(address,value);

  int value2 = EEPROM.read(address);
  Serial.println(value2);
}

void loop(){ }

위의 예제는 문제가 없으나 

EEPROM은 byte단위 저장을 하기 때문에 0~255 또는 -128 ~ 127 범위 외의 값을 쓰고 읽을 경우 에러 또는 원하지 않는 값이 연산될 수 있습니다.

 

예를들어 아두이노 보드에 따라 int 형이 2byte일 수도, 4byte일 수도 있는데 

4 byte라 가정하면 총 4개의 저장공간에 byte단위로 분리하여 저장하고

4개의 byte를 불러와 연산하여 하나의 int값을 만들어야 합니다.

 

시프트 연산자인 >> or << 를 사용하여 저장할 수도 있으나 부동소수점(실수)의 경우에는 어려움이 따릅니다.

 

/* todo update

다음은 byte단위로 여러 크기의 자료형들을 연산하는 방법입니다.

 */

반응형

댓글