亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4369 | 回復(fù): 4
打印 上一主題 下一主題

求助linux下串口收數(shù)據(jù) 數(shù)據(jù)丟失問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-07-04 18:47 |只看該作者 |倒序瀏覽
麻煩大俠看看,給我提點(diǎn)建議 多謝了。

最近在搞一個指紋識別器的應(yīng)用。

平臺是s3c2440 linux2.6.29.1

過程是這樣的:
通過串口向指紋識別器發(fā)命令,命令執(zhí)行完后返回一ack,其中命令和ack都是按照其規(guī)定的協(xié)議來通信的。我首先在無操作系統(tǒng)下,編寫了一個讀寄存器狀態(tài)的命令,命令執(zhí)行正確,也正確收到了ack。

但是在Linux下,編寫了同樣的命令,收到的ack總要丟失字節(jié)(一個ack包是28字節(jié)),有時收到10bytes,有時收到18bytes, 有時收到25bytes,但從來沒有正確接收過!分析收到的殘缺ack包,我可以肯定命令是執(zhí)行正確了的,但為什么每次收到的數(shù)據(jù)不完整,而且就出現(xiàn)10, 18, 25這三種情況之一呢?更奇怪的是,在同樣的情況下,丟失的字節(jié)是相同的,例如5次都只收到了10bytes,那么就丟失了18bytes,并且這5次丟失的這18bytes是相同的。

我嘗試過了select,異步IO, 但得到的結(jié)果還是一樣的。。。下面是我的代碼片段:
...
void set_serial_attr(int fd)
{
    tcgetattr(fd, &tio);
    tio.c_cflag |= (CLOCAL | CREAD);
    tio.c_cflag &= ~CSIZE;
    tio.c_cflag |= CS8;
    tio.c_cflag &= ~PARENB;
    tio.c_cflag &= ~CSTOPB;
    cfsetispeed(&tio, B57600);
    cfsetospeed(&tio, B57600);
   
    c_lflag = tio.c_lflag;
    tio.c_lflag &= ~(ICANON | ECHO);

    tcsetattr(fd,TCSANOW,&tio);
}


...
do{
    select(fd+1, &rfds, NULL, NULL, NULL);

    ret = read(fd, buffer_ack+count, 28);
    if(ret < 0){
        fprintf(stderr, "read ack  failed...\n");
        perror("read");
        exit(1);
    }else
        count += ret;
    DPRINTF("read count = %d\n", count); //printf the number of bytes received

}while(count != 28);
...



[ 本帖最后由 hellangel1984 于 2009-7-5 13:30 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2009-07-04 19:53 |只看該作者
select 最后的timeout 參數(shù)沒設(shè)? 數(shù)據(jù)沒全部到你的循環(huán)就退出了。

論壇徽章:
0
3 [報告]
發(fā)表于 2009-07-05 13:28 |只看該作者
原帖由 connet 于 2009-7-4 19:53 發(fā)表
select 最后的timeout 參數(shù)沒設(shè)? 數(shù)據(jù)沒全部到你的循環(huán)就退出了。


多謝回復(fù)!
我用了一個do...while..循環(huán),如果count != 28的話 會不斷的read。

論壇徽章:
0
4 [報告]
發(fā)表于 2009-07-05 19:36 |只看該作者
那 exit(1); 干什么去了

論壇徽章:
0
5 [報告]
發(fā)表于 2009-07-06 12:04 |只看該作者

re

do...while..之前,count有沒有清零?
我覺的timeout也應(yīng)該設(shè)置,數(shù)據(jù)隔時間太長不能連續(xù)接收,就應(yīng)認(rèn)為錯誤數(shù)據(jù)幀了
另外,殘缺ack包的分析,是前段丟失還是尾部丟失?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP