Linux項目實戰系列之:再談一次GPS數據解析

2021-02-20 嵌入式雜牌軍

上一篇已經寫過GPS解析的話題,今天之所以又寫一次,是因為又有了一些的新的內容想和大家分享。

第一個要分享的是,來源於一位微信公眾號網友的留言,

在上一篇文章裡,我採用的是用strtok函數進行欄位分割,該網友建議試試sscanf,sscanf函數不知道大家平時有沒有用過,它用來分割並處理一串數據比較方便。看個小例子,

#include <math.h>

#include <stdio.h>

#include <stdlib.h>

char *tokenstring = "first,25.5,second,15";

int result, i;

double 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 example */

#include <stdio.h>

int main ()

{

  char sentence []="Rudolph is 12 years old";

  char str [20];

  int i;

  sscanf (sentence,"%s %*s %d",str,&i);

  printf ("%s -> %d",str,i);

  return 0;

}

運行結果如下:

通過這個例子,可以看到sscanf函數用起來其實是很靈活的,參數中的星號*表示數據是從流 stream 中讀取的,但是可以被忽視,即它不存儲在對應的參數中。關於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語句,我採用的方法是將讀取到的GN開頭的語句替換為GP開頭,沒有修改庫本身的原始碼,另外需要注意的是要重新生成一個校驗值更新過去,否則校驗不通過。2) 傳入解析函數nmea_parse的數組必須是\r\n結尾,否則也無法正常解析。3) 解析得到的經緯度格式是度分格式,如果需要使用其他格式,自己得再換算一次。第三個要分享的是,還有一個網友建議去了解minmea,該源碼在:https://github.com/kosma/minmea  GitHub上介紹: a lightweight GPS NMEA 0183 parser library in pure C。它是一個輕量級的庫,並且該網友反饋他在單片機實際項目中用的就是這個。我在它的README文件裡看到一句話:Good documentation on NMEA is at  https://gpsd.gitlab.io/gpsd/NMEA.html   ,提到了一個NEMA比較好的網址,這個網址比絕大多數東抄西抄的中文網址內容要好的多。我們在平時工作寫代碼的時候,可以多利用一些開源的代碼,它會加速我們的進度,同時開原始碼中的編程思想、代碼實現細節也值得我們學習和參考。


Linux下各程序段地址實例分析

VMware虛擬機下安裝Linux作業系統

Linux常用命令例說詳解

用Git提交工程源碼到github倉庫

Git GUI提交工程源碼到github(軟體提交方式)


Linux專輯

C語言專輯

軟實力專輯

軟體推薦專輯

相關焦點

  • Python 實戰:股票數據定向爬蟲
    所以判斷該網頁的數據使用js生成的,不適合本項目。因此換一個網頁。再打開百度股票的網址:連結描述(https://gupiao.baidu.com/stock/sz300023.html),如下圖所示:
  • GitHub:傳統Linux系統的終結者?
    那時候,能夠出現在優秀Linux版本裡,成為開源軟體足夠優秀與成功的標誌。GitHub的出現則改變了這種「共生關係」。GitHub不僅可用來託管源碼,還提供源碼包下載和其他功能,開發者越來越願意使用Github來發布自己的項目。Github的倉庫已有1500萬多個,Fedora軟體包則有18000個,雖然倉庫已經很豐富,但是無法包含全部的開源項目。
  • elementaryOS: 2018最美Linux
    想當年還在讀本科那會,debian還是比較陽春的東西,然後就被ubuntu給普及了,ubuntu我實際上是不喜歡的,如果有linux
  • 摩託車gps定位追蹤器,再也不用擔心車被偷了!
    10月13日,在一小區內丟失一輛公路賽車價值兩萬餘元,隨著案件的不斷發展,民警認為這是一個系列盜竊摩託車案,根據報案人員提供的線索,辦案民警首先來到了某山莊附近調查監控錄像,影像中看到兩名男子將一輛黃色豪爵摩託車騎走,視頻中可清晰看到犯罪嫌疑人的體貌特徵,一名長發男子和一名較壯實的男子共同作案。
  • 元氣騎士:解析「水之杖」的隱藏之力,滿足條件,化身水神利器
    武器解析本期為大家帶來的武器解析,是《元氣騎士》中的法杖型白武:浪潮法杖。那麼為何說它和「水經驗」有所關聯呢?如果選擇高暴擊的職業作為適配者,那麼在實戰中的DPS甚至要強於一般武器。所以老宅建議大家選擇翻滾遊俠作為這件武器的適配者,除了暴擊加成以外,靈活的位移更可大限度提高法球的命中率,可謂一舉兩得。
  • Jetpack 實戰:神奇寶貝
    前言在之前的文章中提到了很多次 Jetpack 實戰項目 PokemonGo(神奇寶貝),PokemonGo 基於 MVVM 架構和 Repository 設計模式開發的一個小型 App,包含了最新的架構和最新的技術,是一個非常好的學習項目,已經上傳到了 GitHub 歡迎前去查看https://github.com/hi-dhl/
  • Excel數據分析必備技能:對數據按範圍多條件劃分等級的判定套路
    但是還是有很多人不了解在Excel中對數據按範圍多條件劃分等級的系統思路和方法,所以本文專門全面介紹一下。比如在下面的成績等級自動判定的表格中,黃色單元格區域是公式計算生成的,可以根據B列的成績按規則自動返回所處的等級,動圖演示如下。
  • 當SQL Server愛上Linux:配置 SQL Server 2017 上的可用性組初體驗
    $ cat /etc/centos-releaseCentOS Linux release 7.4.1708 (Core)在 /etc/hosts 中配置雙方伺服器的名稱和IP位址的解析,以保證兩臺機器可以通過伺服器名稱互相訪問。重要!伺服器主機的 hostname 必須少於等於 15 個字符,否則在配置過程會出現各種莫名其妙的權限報錯。
  • Linux系統入門學習:教你在VirtualBox 安裝 Ubuntu 15.04
    此文為 Linux 新手準備,通過展示整個安裝過程來使 Linxu 新手完成安裝 Ubuntu 或 Fedora ,也懇請各位前輩指出不足之處。閱讀建議Ubuntu 簡介Ubuntu 是一個基於 Debian 的 GNU/Linux 作業系統,支持 X86 、64以及 PPC 架構。
  • 你們想要的:QQ跑在Linux上
    之前在寫《開源的macOS和linux版微信》時,有小夥伴問怎麼搞QQ,做為一個上了年紀的人,我已經不怎麼用QQ了。
  • 取證實戰分享:從Surface取證說起
    雖然可以通過禁用SecureBoot來實現引導,但因為Surface系列設備都默認開啟了BitLocker加密,一旦禁用SecureBoot,系統引導過程中會要求輸入BitLocker恢復密鑰,所以這個方法行不通。
  • 今日直播|項目書記王窪一席談
    11年來,他把一個個差項目理出好效益,用小工程撬動大市場;他從雪域青藏,到彩雲之南,再到東海之濱,幹的每一個項目都拿得出手,掙得到錢;他用自己的實際行動
  • 呼拉容易,轉悠難 --再談印尼建廠
  • Python爬蟲實戰:爬取天氣數據的實例詳解
    在本篇文章裡小編給大家整理的是一篇關於python爬取天氣數據的實例詳解內容,有興趣的朋友們學習下。
  • SQL Server 2017 正式發布:同時支持 Windows 和 Linux
    來自:開源中國社區連結:https://www.oschina.net/news/89263/sql-server-2017-on-windows-linux-and-docker-ga還有一些值得關注的新特性:圖數據分析功能將使客戶能夠使用圖形數據存儲和查詢語言擴展來使用原生的圖形查詢語法,以便在高度互連的數據中發現新的關係。自適應查詢處理是 SQL Server 中新增的一系列功能,可為資料庫帶來更智能的體驗。
  • 每周一球:實戰中的連續變速抓球
    公眾號:羽毛球晉級之路-迪迪王掃碼關注:歡迎來到羽毛球晉級之路的新欄目:《每周一球》鑑於很多球友反應光看羽毛球晉級之路系列有些地方不太好理解的問題,我會根據我在比賽中遇到的一些實際情況,結合羽毛球晉級之路的內容,以案例+理論的方式展示各種概念在球場上如何體現,各位球友有興趣也可以將自己應用的成功案例發至我郵箱,我會擇機選擇一些作為素材解析,大家記得關注哦。
  • 大數據偵查人才訓練班學什麼
    大數據偵查人才訓練班是偵查系卓越人才培養計劃的重要組成部分,領導高度重視,組織教學團隊,創新教學形式,力圖打造一支政治堅定、專業過硬的數據偵查新銳人才隊伍。在課堂講授外,偵查系積極邀請省內大數據實戰專家,為人才訓練班學員開展系列講座。
  • ChromeOS 83為Linux終端新增預設主題:更換更簡單
    上月曾報導谷歌Chrome OS 82正測試新的文件管理器及Linux終端,新增了Material主題和可切換選項卡,日前Chrome OS 83再次新增了幾個預設主題,並且延續了之前的三點菜單和設置入口,讓應用預設主題不用再依靠