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);
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);
반응형