我想用v3s解析gps数据。本来想得是可以读取到换行符停止。但是目前的现象是一串数据过来,比如45个字节,我串口接收到就变成长度32和13的两个数据。
例如我发送$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
接受到的信息如下
# ./uartRec
fcntl=0
isatty success!
fd->open=3
Receive 32
Receice 11
我的串口接收线程如下
static void *threadRead(void *arg)//串口读取线程
{
while(1)
{
bufflen=UART_Recv(uartfd,RecvBuff,150);
if(bufflen>0)
{
SendBuff=(char *)malloc(bufflen);
memcpy(SendBuff,RecvBuff,bufflen);
printf("Receive %d\n",bufflen);
free(SendBuff);
}
usleep(1000);
}
return NULL;
}
串口接受程序如下
int UART_Recv(int fd, char *rcv_buf,int data_len)
{
int len,fs_sel;
fd_set fs_read;
struct timeval time;
FD_ZERO(&fs_read);
FD_SET(fd,&fs_read);
time.tv_sec = 10;//等待时间 秒
time.tv_usec = 0;//等待时间 微妙
//使用select实现串口的多路通信
fs_sel = select(fd+1,&fs_read,NULL,NULL,&time);
//printf("fs_sel = %d\n",fs_sel);
if(fs_sel)
{
len = read(fd,rcv_buf,data_len);
//printf("len = %d fs_sel = %d\n",len,fs_sel);
return len;
}
else
{
//printf("Sorry,I am wrong!");
return FALSE;
}
}
请大家给些指点,或者给个思路怎样在一次只接收32字节的情况下解析gps。。。
离线
你用一个环形缓冲区实现,一个生产者,一个消费者,
消费者只分析缓冲区就可以。
ok!谢谢指点!
离线