主题:[求助]LINUX -socket Can 连续发送数据问题 共有45310人关注过本帖 |
---|
airyrain |
1楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
[求助]LINUX -socket Can 连续发送数据问题 Post By:2014-5-21 9:39:00 [只看该作者]
Linux下 CAN发送数据能不能无间隔连续发送多帧数据? 现在循环几十次write发送,就会有发送丢帧。
如何处理才能连续发送? |
单帖管理 | 引用 | 回复 |
hzc |
2楼 信息 | 搜索 | 邮箱 |
加好友 发短信 员工 |
Post By:2014-5-21 10:45:00 [只看该作者]
你好,can是可以连续发送数据帧的,循环调用write()函数发送数据的测试情况如下:
如果没有解决问题,可以将你的详细情况发送邮件或者直接通过电话和我们交流,谢谢。
|
单帖管理 | 引用 | 回复 |
airyrain |
3楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2014-5-21 11:02:00 [只看该作者]
原先的样例里有mdelay(500)。不知你测试的是否也有延时。 我想做的是不要延时,类似usbcan工具里的 连续N帧的情况,相当于直接往CAN_FD socket 里放了N个can帧。 数据比较多,不想加延时 例如: for( i1=0;i1<100; i1++ ) memset( frame.data, 0x32, frame.can_dlc ); [此贴子已经被作者于2014-5-21 11:06:32编辑过]
|
单帖管理 | 引用 | 回复 |
hzc |
4楼 信息 | 搜索 | 邮箱 |
加好友 发短信 员工 |
Post By:2014-5-21 11:27:00 [只看该作者]
你好,把延时去掉了,这是使用的测试程序: for(i=0;i<500;i++) nbytes = write(s, &frame, sizeof(struct can_frame)); 这是测试的结果:
在连续调用500次write()后,数据没有丢失。 |
单帖管理 | 引用 | 回复 |
airyrain |
5楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2014-5-21 14:07:00 [只看该作者]
for(i=0;i<500;i++) nbytes = write(s, &frame, sizeof(struct can_frame)); 你把printf 去掉试试。。用usbcan 看接收包。100帧以内就漏了。 |
单帖管理 | 引用 | 回复 |
hzc |
6楼 信息 | 搜索 | 邮箱 |
加好友 发短信 员工 |
Post By:2014-5-21 15:11:00 [只看该作者]
你好,查看write()函数的返回值,有出现-1的情况,说明有数据没有发送出去,“丢掉的”数据就是没有发送出去的数据。 可以在程序中增加发送是否成功的判断:if(nbytes!=sizeof(struct can_frame)),如果发送失败就重新发送。 |
单帖管理 | 引用 | 回复 |