主題:[求助]LINUX -socket Can 連續(xù)發(fā)送數(shù)據(jù)問題 共有50225人關注過本帖 |
---|
airyrain |
1樓 信息 | 搜索 | 郵箱 |
加好友 發(fā)短信 |
[求助]LINUX -socket Can 連續(xù)發(fā)送數(shù)據(jù)問題 Post By:2014-5-21 9:39:00 [只看該作者]
Linux下 CAN發(fā)送數(shù)據(jù)能不能無間隔連續(xù)發(fā)送多幀數(shù)據(jù)? 現(xiàn)在循環(huán)幾十次write發(fā)送,就會有發(fā)送丟幀。
如何處理才能連續(xù)發(fā)送? |
單帖管理 | 引用 | 回復 |
hzc |
2樓 信息 | 搜索 | 郵箱 |
加好友 發(fā)短信 員工 |
Post By:2014-5-21 10:45:00 [只看該作者]
你好,can是可以連續(xù)發(fā)送數(shù)據(jù)幀的,循環(huán)調(diào)用write()函數(shù)發(fā)送數(shù)據(jù)的測試情況如下:
如果沒有解決問題,可以將你的詳細情況發(fā)送郵件或者直接通過電話和我們交流,謝謝。
|
單帖管理 | 引用 | 回復 |
airyrain |
3樓 信息 | 搜索 | 郵箱 |
加好友 發(fā)短信 |
Post By:2014-5-21 11:02:00 [只看該作者]
原先的樣例里有mdelay(500)。不知你測試的是否也有延時。 我想做的是不要延時,類似usbcan工具里的 連續(xù)N幀的情況,相當于直接往CAN_FD socket 里放了N個can幀。 數(shù)據(jù)比較多,不想加延時 例如: for( i1=0;i1<100; i1++ ) memset( frame.data, 0x32, frame.can_dlc ); [此貼子已經(jīng)被作者于2014-5-21 11:06:32編輯過]
|
單帖管理 | 引用 | 回復 |
hzc |
4樓 信息 | 搜索 | 郵箱 |
加好友 發(fā)短信 員工 |
Post By:2014-5-21 11:27:00 [只看該作者]
你好,把延時去掉了,這是使用的測試程序: for(i=0;i<500;i++) nbytes = write(s, &frame, sizeof(struct can_frame)); 這是測試的結(jié)果:
在連續(xù)調(diào)用500次write()后,數(shù)據(jù)沒有丟失。 |
單帖管理 | 引用 | 回復 |
airyrain |
5樓 信息 | 搜索 | 郵箱 |
加好友 發(fā)短信 |
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幀以內(nèi)就漏了。 |
單帖管理 | 引用 | 回復 |
hzc |
6樓 信息 | 搜索 | 郵箱 |
加好友 發(fā)短信 員工 |
Post By:2014-5-21 15:11:00 [只看該作者]
你好,查看write()函數(shù)的返回值,有出現(xiàn)-1的情況,說明有數(shù)據(jù)沒有發(fā)送出去,“丟掉的”數(shù)據(jù)就是沒有發(fā)送出去的數(shù)據(jù)。 可以在程序中增加發(fā)送是否成功的判斷:if(nbytes!=sizeof(struct can_frame)),如果發(fā)送失敗就重新發(fā)送。 |
單帖管理 | 引用 | 回復 |