如题:
大循环里面调用了sprintf,把数值转换成字符串,通过串口3发送。
中断里面调用sprintf,把数值转换成字符串,通过串口1发送。
注意:存放字符串的数组是2个不同的全局变量
经过对比发现,如果大循环里面调用了sprintf,中断里面也调用了,会导致输出的字符串不正常,请问这个方法要怎么解决?
具体代码如下
void U3_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART3_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)USART3_TX_BUF); //此次发送数据的长度
for(j=0;j<i;j++) //循环发送数据
{
while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET); //等待发送缓冲区非空写入数据
USART_SendData(USART3,USART3_TX_BUF[j]);
}
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //等待发送完成
} |