当前位置:首页 > 天道酬勤 > 正文内容

容后再谈(再谈)

张世龙2021年12月03日 21:25天道酬勤1170

前面两个关于GPS芯片分析的话题已经写完了,今天之所以再写,是因为有一些新的内容要和大家分享。

首先要分享的是一位网友的留言。

在上一篇文章中,我使用strtok函数对字段进行了分段。这位网友建议试试sscanf。不知道大家平时有没有用过sscanf功能。分割和处理一串数据很方便。看一个小例子,

#包括数学。h

#包含stdio.h

#包含stdlib.h

char *tokenstring='第一,25.5,第二,15 ';

int结果,I;

双FP;

char o[10],f[10],s[10],t[10];

void main()

{

result=sscanf(tokenstring,'%[^','],%[^','],%[^','],%s',o,s,t,f);

FP=atof(s);

I=atoi(f);

printf('%s %lf %s %d ',o,fp,t,I);

}运行结果如下:

因此,也可以用这个sscanf解析NMEA语句,就像上面的例子一样。就像strtok函数一样,要注意处理连续逗号的情况,也可以使用解析前在连续逗号之间插入特殊字符的方法。

让我们看另一个使用sscanf函数的例子。

/* sscanf示例*/

#包含stdio.h

int main()

{

char句子[]='鲁道夫12岁';

字符串[20];

int I;

sscanf(句子,' %s %*s %d ',str,I);

printf ('%s - %d ',str,I);

返回0;

}运行结果如下:

从这个例子中,我们可以看到sscanf函数实际上使用起来非常灵活。参数中的星号*表示数据是从流流中读取的,但可以忽略,即不存储在相应的参数中。关于sscanf功能的详细用法,请参考http://www.cplusplus.com/reference/cstdio/scanf/.

它的第二个参数与scanf函数的第二个参数相同。

第二件要分享的是,有网友建议了解一下nmealib。官方介绍在http://nmea.sourceforge.net/,源下载地址在https://sourceforge.net/projects/nmea/files/latest/download.

我之前听说过GPS相关的开源代码,所以就趁机学习了一下。这个库使用起来非常简单,我花了一些时间将其应用到ARM Linux上。

使用过程中有几点需要注意:

1)对于GGA和RMC语句,这个库只支持GP开头的语句,即GPGGA和GPRMC,不能处理GNGGA和GNRMC语句。我采用的方法是用GP开头的语句代替读GN开头的语句,而不修改库本身的源代码。此外,重要的是重新生成检查值来更新过去,否则检查将不会通过。

2)传入解析函数nmea_parse的数组必须在\r\n的末尾,否则将无法正确解析。

3)解析得到的经纬度格式为度格式。如果需要使用其他格式,就要重新转换。

第三件要分享的是,另一位网友建议了解明美。源代码在https://github.com/kosma/minmea.

GitHub推出纯c语言的:a轻量级GPS NMEA 0183解析器库

是一个轻量级的库,网友反馈这是他在实际MCU项目中使用的。

感兴趣的童靴可以自己研究。

我在它的自述文件中读到一句话:nmeaia的好文档在https://gpsd.gitlab.io/gpsd/NMEA.html,提到了一个NEMA更好的网站,比大多数从东到西复制的中国网站都好得多。

平时写代码的时候可以多利用一些开源代码,这样会加快我们的进度。同时,开源代码中的编程思想和代码实现细节也值得我们学习和借鉴。

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/13552.html

标签: sscanfgps
分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。