sprintf能否被中断,大循环同时调用

[复制链接]
 楼主| 一亚麻怡 发表于 2018-8-10 09:36 | 显示全部楼层 |阅读模式
如题:
大循环里面调用了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); //等待发送完成
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

404

主题

404

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

404

主题

404

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部