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을 리턴한다.