要实现printf,就需要重写两个函数:
int fputc(int _c, register FILE *_fp)
int fputs(const char *_ptr, register FILE *_fp)
最开始我只写了 fputc( ), 发现只能输出字符串, 无法输出格式化的字符串,比如带%d的。
最开始不知道为什么, 后来重写了fputs( )就可以了。
int fputc(int _c, register FILE *_fp)
{
MAP_UART_transmitData( DEBUG_UART_MODULE , (uint8_t) _c);
while (!MAP_UART_getInterruptStatus(DEBUG_UART_MODULE,
EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG));
EUSCI_A_CMSIS(DEBUG_UART_MODULE)->IFG |= (EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG);
return _c;
}
int fputs(const char *_ptr, register FILE *_fp)
{
uint16_t i, len;
len = strlen(_ptr);
for(i=0; i<len; i++)
{
MAP_UART_transmitData( DEBUG_UART_MODULE , (unsigned char)_ptr[i] );
while (!MAP_UART_getInterruptStatus(DEBUG_UART_MODULE,
EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG));
EUSCI_A_CMSIS(DEBUG_UART_MODULE)->IFG |= (EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG);
}
return len;
}
代码也很简单, 串口初始化的过程我就不写了,两个函数主要是实现串口发送的功能。
|