回复帖子:(hzc)你好,查看write()函数的返回值,有出现...

用户名:   *您没有注册?
密码:   *忘记论坛密码?    标题采用“回复:XXX....”
验证码 点击获取验证码
主题标题:  *不得超过 200 个汉字
当前心情
上一页 发帖表情 下一页
内容
  

主题最新回顾(发布时间:2014-5-21 15:11:00)
--  作者:hzc
--  

你好,查看write()函数的返回值,有出现-1的情况,说明有数据没有发送出去,“丢掉的”数据就是没有发送出去的数据。

可以在程序中增加发送是否成功的判断:if(nbytes!=sizeof(struct can_frame)),如果发送失败就重新发送。


主题最新回顾(发布时间:2014-5-21 14:07:00)
--  作者:airyrain
--  

    for(i=0;i<500;i++)
    {

        nbytes = write(s, &frame, sizeof(struct can_frame));
      //  printf( "%d sendbytes\n", i1+1 );
        i1++;
    }

你把printf 去掉试试。。用usbcan 看接收包。100帧以内就漏了。


主题最新回顾(发布时间:2014-5-21 11:27:00)
--  作者:hzc
--  

    你好,把延时去掉了,这是使用的测试程序:  

    for(i=0;i<500;i++)
    {

        nbytes = write(s, &frame, sizeof(struct can_frame));
        printf( "%d sendbytes\n", i1+1 );
        i1++;
    }

    这是测试的结果:

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20140521112352.jpg
图片点击可在新窗口打开查看

 

    在连续调用500次write()后,数据没有丢失。


主题最新回顾(发布时间:2014-5-21 11:02:00)
--  作者:airyrain
--  

原先的样例里有mdelay(500)。不知你测试的是否也有延时。

我想做的是不要延时,类似usbcan工具里的 连续N帧的情况,相当于直接往CAN_FD socket 里放了N个can帧。

数据比较多,不想加延时

例如:

    for( i1=0;i1<100; i1++ )
    {

     memset( frame.data, 0x32, frame.can_dlc );
        nbytes =write(s, &frame, sizeof(struct can_frame))
         printf( "%d sendbytes: %d\n", i1+1, nbytes );
    }

[此贴子已经被作者于2014-5-21 11:06:32编辑过]

主题最新回顾(发布时间:2014-5-21 10:45:00)
--  作者:hzc
--  

    你好,can是可以连续发送数据帧的,循环调用write()函数发送数据的测试情况如下:

 


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20140521104205.jpg
图片点击可在新窗口打开查看

 

    如果没有解决问题,可以将你的详细情况发送邮件或者直接通过电话和我们交流,谢谢。

   

 

 


 


主题最新回顾(发布时间:2014-5-21 9:39:00)
--  作者:airyrain
--  [求助]LINUX -socket Can 连续发送数据问题

Linux下 CAN发送数据能不能无间隔连续发送多帧数据?

现在循环几十次write发送,就会有发送丢帧。

 

如何处理才能连续发送?