关于nmealib库的学习

调用流程

前部分的调用流程如下:

nmea_parse()
->nmea_parser_push(parser, buff, buff_sz);
	->nparsed += nmea_parser_real_push(parser, buff, nparse);
		->sen_sz = nmea_find_tail( (const char *)parser->buffer + nparsed, (int)parser->buff_use - nparsed, &crc);
			->nmea_parse_GPGGA(
                    (const char *)parser->buffer + nparsed,
                    sen_sz, (nmeaGPGGA *)node->pack))【以GPGGA为示例】

调用分为两部分:

  • 循环的将读取到的NMEA格式报文数据拷贝到parser的buffer中,每一个循环拷贝nparse个数据, 见这个函数nmea_parser_real_push;
  • 找到buffer中拷贝过来报文中的一段标准行报文的tail尾部,并进行解析,详情见这个函数nmea_parse_GPGGA。

Tips

- 解析出的链表的管理
parser中有两个指针parser->top_node和parser->end_node,用于管理解析出的信息结构体node链表,其中top_node指向链表的头部,end_node指向链表的尾部。
- parser->buffer的管理
注意在调用的前半部分,每次循环都将拷贝报文数据到parser的buffer中,但buffer的大小不是无限的,一旦发现拷贝进入buffer的数据量超出了设定大小,将清除一次buffer,可以在nmea_parser_real_push函数中看到如下语句:

if(parser->buff_use + buff_sz >= parser->buff_size)
		nmea_parser_buff_clear(parser);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值