예, 소스 코드에서 기본 데이터를 EEPROM에 수동으로 쓸 수 있습니다. 먼저, AVR : Dean의 AVR EEPROM Tutorial 과 함께 EEPROM에 대한이 멋진 안내서를 확인하십시오 . 또한 소스 파일과 함께 장치에 프로그래밍되는 makefile을 사용하여 EEPROM 데이터를 포함하는 .eep 파일을 만드는 것이 더 좋습니다. 그러나 다양한 makefile 및 링커 작업에 익숙하지 않은 경우 소스 코드 파일 내에서 계속 수행 할 수 있습니다. 회로에 전원을 공급하자마자 초기 프로그램 작업이 중단됩니다.
프로그램 시작시 (모든 종류의 메인 루프 이전에) 다음과 같은 작업을 수행 할 수 있습니다.
#include <avr/eeprom.h>
#define ADDRESS_1 46 // This could be anything from 0 to the highest EEPROM address
#define ADDRESS_2 52 // This could be anything from 0 to the highest EEPROM address
#define ADDRESS_3 68 // This could be anything from 0 to the highest EEPROM address
uint8_t dataByte1 = 0x7F; // Data for address 1
uint8_t dataByte2 = 0x33; // Data for address 2
uint8_t dataByte3 = 0xCE; // Data for address 3
eeprom_update_byte((uint8_t*)ADDRESS_1, dataByte1);
eeprom_update_byte((uint8_t*)ADDRESS_2, dataByte2);
eeprom_update_byte((uint8_t*)ADDRESS_3, dataByte3);
"업데이트"기능은 먼저 EEPROM 수명을 유지하면서 불필요한 쓰기를 저장하기 위해 해당 값이 이미 있는지 확인합니다. 그러나 매우 많은 위치에서이 작업을 수행하려면 시간이 다소 걸릴 수 있습니다. 단일 위치를 확인하는 것이 좋습니다. 원하는 값이면 나머지 업데이트를 완전히 건너 뛸 수 있습니다. 예를 들면 다음과 같습니다.
if(eeprom_read_byte((uint8_t*)SOME_LOCATION) != DESIRED_VALUE){
eeprom_write_byte((uint8_t*)SOME_LOCATION, DESIRED_VALUE);
eeprom_update_byte((uint8_t*)ADDRESS_1, dataByte1);
eeprom_update_byte((uint8_t*)ADDRESS_2, dataByte2);
eeprom_update_byte((uint8_t*)ADDRESS_3, dataByte3);
}
대량의 데이터를 업데이트하려는 경우와 같은 다른 기능을 사용해보십시오 eeprom_update_block(...)
. 그리고 그 튜토리얼을 확실히 읽으십시오. 잘 작성되었습니다.
모든 EEPROM 업데이트 명령문을 단일 전 처리기 조건문에 넣을 수 있습니다. 이것은 매우 간단합니다.
#if defined _UPDATE_EEPROM_
#define ADDRESS_1 46 // This could be anything from 0 to the highest EEPROM address
uint8_t dataByte = 0x7F; // Data for address 1
eeprom_update_byte((uint8_t*)ADDRESS_1, dataByte1);
#endif // _UPDATE_EEPROM_
이 코드는 다음을 수행하지 않으면 컴파일되지 않습니다.
#define _UPDATE_EEPROM_
주석으로 남겨두고 기본 EEPROM 값을 변경해야하는 경우 주석을 해제하십시오. C 전처리기에 대한 자세한 내용은이 온라인 설명서를 확인하십시오 . 매크로 및 조건문 섹션에 가장 관심이 있다고 생각합니다.