我自定义了printf函数,现在遇见一个问题,我在主循环中调用 uart_printf("H\r\n");然后串口助手收不到数据,经过单步调试发现,程序运行进入uart_printf函数后, vsnprintf返回的值为0,导致没有进入发送,为了测试是不是vsnprintf函数运行异常,我写了这么一句代码验证:
lenth = vsnprintf(write_buf, MAX_WRITE_LEN, "Test string", args);
但是运行后vsnprintf是可以正常返回lenth的,证明了函数运行没问题,问题出在貌似函数输入接口"H\r\n"数据没有被正确传到* fmt,导致vsnprintf一直返回的是0,请问这个怎么解决,试了很多办法都不行,我的工程是COFF格式输出的会不会有影响?究竟问题出在哪里,为什么"H\r\n"没有被正确传输到* fmt呢?
void uart_printf(char * fmt, ...) //自定义变参函数
{
va_list args;
unsigned int i,i1;
va_start(args, fmt);
lenth = vsnprintf((char*)write_buf, MAX_WRITE_LEN, fmt, args);
va_end(args);
if (lenth <= 0) {
// 发送错误消息
const char* error_msg = "vsprintf error\r\n";
for (i = 0; error_msg[i] != '\0'; i++) {
while (ScibRegs.SCICTL2.bit.TXRDY == 0);
ScibRegs.SCITXBUF.all = error_msg[i];
}
return;
}
for (i = 0; i < lenth; i++)
{
if ( '\0' != write_buf[i] )
{
while (ScibRegs.SCICTL2.bit.TXRDY == 0); //使用SCIA
ScibRegs.SCITXBUF.all=write_buf[i];
}
}
}