Luminary Micro 사용시 printf를 사용하시 문제점
Luminary Micro 사용시 기본예제를 수정하여 printf를 사용하면 문제가 발생한다.
기본 예제에서 제공하는 blinky-ewarm4.xcl 파일에는 HEAP 영역이 할당되어 있지 않아서 파일을 수정했다.
-> ewarm4_flash.xcl HEAP영역 설정
//*************************************************************************
// Stack and heap segments.
//*************************************************************************
-D_CSTACK_SIZE=128
-D_HEAP_SIZE=128
-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND
-Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND
추가하고나니 printf가 정상 동작한다.
그리고 printf에서 Buffer 사이즈도 늘렸다.
void U0_printf(char *fmt,...)
{
va_list ap;
unsigned char string[64];
추가로 Sysetm Stack크기도 변경해 두어야 한다.
startup_ewarm4.c 에서 pulStack 변수 크기를 바꾸니 정상 동작한다.
//static unsigned long pulStack[64];
static unsigned long pulStack[128];
IAR에서 printf full옵션으로 설정하면 용량이 너무 크다 10kbyte이상 커진다. 그렇다고 Tiny는 기능이 너무 작고.. 그나마 Small으로 설정하면 적당히 printf를 사용할 수 있고 용량도 적절한것 같다.