硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2451|回复: 1
收起左侧

[其它] sprintf能否被中断,大循环同时调用

[复制链接]

5

主题

26

回帖

41

积分

新手上路

积分
41
发表于 2018-12-24 22:57:57 | 显示全部楼层 |阅读模式
如题:
大循环里面调用了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); //等待发送完成
}
回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2018-12-24 23:03:41 | 显示全部楼层
中断外的加临界段。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 07:18 , Processed in 0.158543 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表