printf_usb 丢包,大神求解
主函数测试,i++前面明显丢了一截,printf_usb后面加延时明显能改善,但延时要加几百个ms才行。for(i=0;i<100;i++)
{
printf_usb("%d",i);
}
接收←464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
使用sprintf将字符串格式化到buffer中一次发送,一个字节一个字节发送太浪费带宽。
可使用Usb_SendData发送buffer,
或者printf("%s",pstr);发送字符串。
我在读完ADC也是打印出现乱码,然后我加了10ms的延迟就好了. 猜测是这样的,printf写入buffer,然后中断和硬件在后台发送,如果发送速度大于后台处理速度,就会阻塞,猜的,不一定对
还有个问题就是要等待USB配置完毕再开始发送,上电直接运行这个for循环,USB可能还没配置完毕
我写的串口程序就是这样的,上一个数据包没发完,可以等待,也可以丢弃
https://www.stcaimcu.com/thread-16321-1-1.html
https://www.stcaimcu.com/thread-4598-1-1.html
ercircle 发表于 2025-8-2 14:59
使用sprintf将字符串格式化到buffer中一次发送,一个字节一个字节发送太浪费带宽。
可使用Usb_SendData发 ...
sprintf 一样是会丢包。只能放到for循环里面,前面丢一点包后面就正常了。
tgqoholu 发表于 2025-8-4 11:14
sprintf 一样是会丢包。只能放到for循环里面,前面丢一点包后面就正常了。
...
sprintf不是发送函数,只是格式化打印到buffer里,发还是printf。
“前面丢一点包”,是等USB配置完成并且串口打开后再发送吗,改成上位机发个字母再开始发对比下?
丢包一个是发送速率控制在带宽内,一个是可以建立ACK机制和重传机制。 ercircle 发表于 2025-8-4 11:25
sprintf不是发送函数,只是格式化打印到buffer里,发还是printf。
“前面丢一点包”,是等USB配置完成并 ...
用上位机发消息,再接收printf,这种方法可以解决问题,谢谢。
页:
[1]