프로그램 다운로드 시 eeprom 초기화
기술노트 32477
아키텍처:
STM8
컴포넌트:
compiler
업데이트:
2021-05-11 오전 5:56
소개
본 기술 노트는 IAR Embedded Workbench for STM8와 EEPROM 초기화에 대해서 다룹니다. 다음과 같은 대입은:
__eeprom char array[] = {0X1C,0X1F,0X9F,0XFF};
.. 컴파일러에 의해 에러 메시지가 발생됩니다.
Error[Ta004]: __eeprom variable must be __no_init
..그 즉슨, eeprom 변수들은 컴파일 중에 값을 대입할 수 없다는 것을 의미합니다.
해결방법
변수를 static char 형으로 선언합니다. eeprom 섹션 "my_eeprom" 에 할당합니다.
char array[]@ "my_eeprom" = {0X1C,0X1F,0X9F,0XFF};
그리고 링커 설정파일을 다음과 같이 업데이트 합니다.
place in Eeprom { rw section .eeprom.noinit,
rw section my_eeprom };
참고 바랍니다
'array' 변수는 __eeprom 메모리 속성을 가지지 않습니다. 이는 'array'로부터 읽기는 괜찮지만, 컴파일러는 모든 할당에 대해 (일반적으로 전혀 영향을 미치진 않지만) 일반적인 __near 메모리 쓰기를 한다는 것을 의미합니다. eeprom을 쓰기 위해 직접 루틴을 호출해야 하며, 일반적인 C할당이 없는지 확인하는 것은 여러분에게 달려 있습니다.
배경지식
__eeprom 변수는 반드시 __no_init 이어야 합니다. __eeprom 변수들은 일반적인 변수의 초기화 과정과 다른 과정을 요구하기 때문입니다. EEPROM 메모리는 영구 저장 장치에 사용할 것으로 추정하기에, 자동으로 초기화할 필요가 없을 것입니다. EEPROM 메모리를 초기화하는 것은 프로그램 (혹은 시스템)에 달려있습니다. 그럼에도, __eeprom 변수 초기화에 관한 지원을 이후 배포될 IAR Embedded Workbench for STM8에서 계획할 예정입니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.