SW 개발

CodeWarrior / PowerPC / MPC5xxx 계열에서 printf 사용

. . . 2012. 10. 24. 09:40
반응형

Power PC 에서 Printf 사용


PowerPC / CodeWarrior 에서 Printf 를 사용하기 위한 팁




기본 API


일단 stdio.h 를 include 시키고

printf 를 사용하기 위해서는 간단히 아래의 3가지 함수가 필요하다.



int32_t ReadUARTN(void* bytes, unsigned long limit)
{
        return 0;
}

int32_t WriteUARTN(const void* bytes, unsigned short length)
{
        // must return zero...
        // zero is success...
        return 0;
        
}

int32_t InitializeUART(int32_t baudRate)
{
    init_eSCI(PORT_A,115200);
    return 0;
}



즉... printf 는 라이브러리로 제공되며, 해당 API는 끝에가서 위의 3가지 함수가 필요하게 된다.


참고로... 위의 함수의 원형으로 추정되는 소스...(추정만할뿐... 실제 링킹은 잘모르겠다;;)


C:\Program Files\Freescale\CW for MPC55xx and MPC56xx 2.8\PA_Support\ewl\EWL_C\include\sys\UART.h


typedef int UARTError;

enum {
kUARTNoError = 0,
kUARTUnknownBaudRate,
kUARTConfigurationError,
kUARTBufferOverflow,/* specified buffer was too small */
kUARTNoData/* no data available from polling */
};

typedef enum {
kBaudHWSet = -1,/* use HW settings such as DIP switches */
kBaud300 = 300,/* valid baud rates */
kBaud600 = 600,
kBaud1200 = 1200,
kBaud1800 = 1800,
kBaud2000 = 2000,
kBaud2400 = 2400,
kBaud3600 = 3600,
kBaud4800 = 4800,
kBaud7200 = 7200,
kBaud9600 = 9600,
kBaud19200 = 19200,
kBaud38400 = 38400,
kBaud57600 = 57600,
kBaud115200 = 115200,
kBaud230400 = 230400
} UARTBaudRate;

UARTError InitializeUART(UARTBaudRate baudRate);
UARTError TerminateUART(void);

UARTError ReadUARTPoll(char* c);

UARTError ReadUART1(char* c);
UARTError ReadUARTN(void* bytes, unsigned long length);
UARTError ReadUARTString(char* string, unsigned long limit, char terminateChar);

UARTError WriteUART1(char c);
UARTError WriteUARTN(const void* bytes, unsigned long length);
UARTError WriteUARTString(const char* string)


보면알지만...


write / read 함수 부분에서... return 값은... 읽고 쓴 바이트 수가 아니라...

Error define 값이라는 것이다..


계속이어서....


printf 에서 정상적으로 나오기 위해선... WriteUARTN() 에서 정상적으로 동작을 시키기 위해서는  kUARTNoError 를 리턴해줘야 이상없이 동작한다.


즉, WriteUARTN 에서는 실제 물리 eSCI 쪽에 데이터를 쓰는 함수를 구현하고...

실제 쓴 lenth 를 리턴하면 다음에 printf() 할때는 fail 이 나므로 0을 리턴한다.

반응형