본문 바로가기

[AVR]/AVR_EVM

printf_P() 함수를 이용한 SRAM절약

printf_P() 함수를 이용한 SRAM절약

AVR에서 문자열은 일반 컴파일러와 다르게 SRAM에 저장이 된다.
특히나 램이 적은 MCU에서는 디버깅 출력을 위한 문자열 때문에 곤욕을 치루는데...
printf_P()함수를 이용하면 쉽게 해결 할 수 있다.


printf("\n\n**  String Test - Memory Alocated FLASH. **\n");
일반적인 printf를 이용하면 문자열이 SRAM영역으로 잡힌다.


#include <avr/pgmspace.h>

printf_P(PSTR("\n\n**  String Test - Memory Alocated FLASH. **\n"));
printf_P()함수를 이용하면 문자열이 FLASH영역으로 잡히므로 램을 줄일 수 있다.


따지고 보면 아래과 같은 형식이다. 예전에는 이렇게 사용했고...
static PROGMEM char  string[] = "\n\n**  String Test - Memory Alocated FLASH. **\n"
memcpy_P(buf, string, sizeof(string));
printf((buf);
반응형