- 论坛徽章:
- 0
|
麻烦大侠看看,给我提点建议 多谢了。
最近在搞一个指纹识别器的应用。
平台是s3c2440 linux2.6.29.1
过程是这样的:
通过串口向指纹识别器发命令,命令执行完后返回一ack,其中命令和ack都是按照其规定的协议来通信的。我首先在无操作系统下,编写了一个读寄存器状态的命令,命令执行正确,也正确收到了ack。
但是在Linux下,编写了同样的命令,收到的ack总要丢失字节(一个ack包是28字节),有时收到10bytes,有时收到18bytes, 有时收到25bytes,但从来没有正确接收过!分析收到的残缺ack包,我可以肯定命令是执行正确了的,但为什么每次收到的数据不完整,而且就出现10, 18, 25这三种情况之一呢?更奇怪的是,在同样的情况下,丢失的字节是相同的,例如5次都只收到了10bytes,那么就丢失了18bytes,并且这5次丢失的这18bytes是相同的。
我尝试过了select,异步IO, 但得到的结果还是一样的。。。下面是我的代码片段:
...
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 编辑 ] |
|