打印

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

[复制链接]
346|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一亚麻怡|  楼主 | 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

粉丝