找回密码
 立即注册
查看: 80|回复: 6

printf_usb 丢包,大神求解

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-08-04 11:14:10
已绑定手机

3

主题

9

回帖

45

积分

新手上路

积分
45
发表于 2025-8-2 14:25:11 | 显示全部楼层 |阅读模式
主函数测试,i++前面明显丢了一截,printf_usb后面加延时明显能改善,但延时要加几百个ms才行。
        for(i=0;i<100;i++)

        {
                printf_usb("%d  ",i);

        }


[14:18:23.323]接收←46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99  

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:264
  • 最近打卡:2025-08-11 08:50:56
已绑定手机

78

主题

2838

回帖

5879

积分

荣誉版主

无情的代码机器

积分
5879
发表于 2025-8-2 14:59:15 | 显示全部楼层
使用sprintf将字符串格式化到buffer中一次发送,一个字节一个字节发送太浪费带宽。

可使用Usb_SendData发送buffer,
或者printf("%s",pstr);发送字符串。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:451
  • 最近打卡:2025-08-11 00:23:40
已绑定手机

150

主题

1823

回帖

2025

积分

金牌会员

积分
2025
发表于 2025-8-2 18:35:06 | 显示全部楼层
我在读完ADC也是打印出现乱码,然后我加了10ms的延迟就好了.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:524
  • 最近打卡:2025-08-11 07:16:53
已绑定手机

86

主题

5879

回帖

1万

积分

超级版主

积分
10609
发表于 2025-8-2 22:14:12 | 显示全部楼层
猜测是这样的,printf写入buffer,然后中断和硬件在后台发送,如果发送速度大于后台处理速度,就会阻塞,猜的,不一定对
还有个问题就是要等待USB配置完毕再开始发送,上电直接运行这个for循环,USB可能还没配置完毕
我写的串口程序就是这样的,上一个数据包没发完,可以等待,也可以丢弃
https://www.stcaimcu.com/thread-16321-1-1.html
https://www.stcaimcu.com/thread-4598-1-1.html
截图202508022215359845.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-08-04 11:14:10
已绑定手机

3

主题

9

回帖

45

积分

新手上路

积分
45
发表于 7 天前 | 显示全部楼层
erci*** 发表于 2025-8-2 14:59
使用sprintf将字符串格式化到buffer中一次发送,一个字节一个字节发送太浪费带宽。

可使用Usb_SendData发 ...

sprintf 一样是会丢包。只能放到for循环里面,前面丢一点包后面就正常了。

点评

sprintf不是发送函数,只是格式化打印到buffer里,发还是printf。 “前面丢一点包”,是等USB配置完成并且串口打开后再发送吗,改成上位机发个字母再开始发对比下? 丢包一个是发送速率控制在带宽内,一个是可以建立  详情 回复 发表于 7 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:264
  • 最近打卡:2025-08-11 08:50:56
已绑定手机

78

主题

2838

回帖

5879

积分

荣誉版主

无情的代码机器

积分
5879
发表于 7 天前 | 显示全部楼层
tgqo*** 发表于 2025-8-4 11:14
sprintf 一样是会丢包。只能放到for循环里面,前面丢一点包后面就正常了。
...

sprintf不是发送函数,只是格式化打印到buffer里,发还是printf。
“前面丢一点包”,是等USB配置完成并且串口打开后再发送吗,改成上位机发个字母再开始发对比下?
丢包一个是发送速率控制在带宽内,一个是可以建立ACK机制和重传机制。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-08-04 11:14:10
已绑定手机

3

主题

9

回帖

45

积分

新手上路

积分
45
发表于 7 天前 | 显示全部楼层
erci*** 发表于 2025-8-4 11:25
sprintf不是发送函数,只是格式化打印到buffer里,发还是printf。
“前面丢一点包”,是等USB配置完成并 ...

用上位机发消息,再接收printf,这种方法可以解决问题,谢谢。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-11 13:12 , Processed in 0.122214 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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