본문 바로가기

[MSP430]/MSP430_EVM

EW430 IAR컴파일러에서 printf사용

EW430 IAR컴파일러에서 printf사용
V2.3에서 잘 사용했던 예제가 V3.4에서 정상 동작을 하지 않아 2시간 해멨다

자세히 따지고 보면 않될 것도 없다. 결국 내가 잘못 한 것이었군...
putchar함수에서 u0_WaitForSend()를 빼먹고 있었다.
예전의 _formatted_write() 메크로를 사용했던 부분을 범용을 사용하기 위해 아래와 같이 변경 하였다.

int U0_printf(const char *format, ...)
{
    int i = 0;
   
    va_list ap;
    char string[40]; //<--- 문자열 최대사이즈

    va_start(ap,format);
    vsprintf(string,format,ap);

    //문자열 출력 
    for(i=0;i<40;i++)
    {
        if(string[i]==0)break;
        u0_WaitForSend();
        _u0_TxData(string[i]);
    }

    va_end(ap);

    return i;
}

그리고 아래와 같이 옵션에서 CLIB 라이브러리를 사용해야 vsprintf와 같은 함수를 사용할 수 있다.




얼마전 받는 최신 버전(IAR MSP430 5.10)에서 또 에러가 발생한다.
va_list 가 정의 되지 않았다고... 버전 마다 왜이리 호환이 안되는건지...
아무튼 #include "stdio.h" 추가 하니 에러가 발생하지 않는다.

반응형