原创 calculate nmea string checksum

2010-5-24 09:14 1750 17 19 分类: 消费电子

The sample code is to check the correct gprmc format with the last chars, and try to calculate the checksum of gprmc.

// parameters:
// softuart_revbuf: the whole nmea string with header_char '$' and endchar_char 0x0a
// softuart_revbuf_len: the length of this nmea string
// return:
// TRUE: right format; FALSE: bad string format with error end chars or checksum
bool nmea_checksum(U8* softuart_revbuf, U32 softuart_revbuf_len)
{
            U8 checksum = 0;
            U8 sum[2], nmea_sum[2];

            // "$GPRMC"
            if( (softuart_revbuf[3]=='R') && (softuart_revbuf[4]=='M') && (softuart_revbuf[5]=='C') ) {

                // check nmea data with length, and '*'<0x0d><0x0a> as endchar
                if( (softuart_revbuf_len<10) || (softuart_revbuf[softuart_revbuf_len-2]!=0x0d) || (softuart_revbuf[softuart_revbuf_len-5]!='*') ) {
                    return FALSE;               
                }
               
                // checksum
                for(U32 i=1; i<(softuart_revbuf_len-5); i++)
                    checksum ^= softuart_revbuf;
                nmea_sum[0] = softuart_revbuf[softuart_revbuf_len-4];
                nmea_sum[1] = softuart_revbuf[softuart_revbuf_len-3];           
                copy_2xchar_1xchar(sum, nmea_sum, 1);
                if( checksum != sum[0] ) {
                    return FALSE;
                }
           }

           return TRUE;
}


Allen Zhan
GV-TECH
2010.05.24

文章评论2条评论)

登录后参与讨论

用户1397540 2011-10-28 13:51

这个问题非常重要

用户1553070 2011-10-28 10:52

温度保险丝? 大哥,你以为想加就能加的啊, 涉及到结构涉及,线路排布,使用环境,组件的敏感程度。

用户1623087 2011-10-28 09:30

在便携式移动式电子设备大量使用的背景下、在节能环保概念的推动下,各类电池遍布在我们生活的各个角落。可是电池本身的安全、安全使用电池、防止电池被用于不安全的目的,一直没有被世人所重视。电池作为一种携载能量的装置,可以在规定的使用条件下安全的释放能量,也可能被有意或无意的急剧释放能量而产生设备、人身危害。

用户1616640 2011-10-28 08:56

为什么不加一个温度保险丝呢,才几毛钱,为电池提供一套最后屏障,哎。。。。我们公司是专业生产温度保险丝的,有十几年的经验,各国认证很全,www.setfuse.com 0592-7617031 15980810124。

用户1277994 2010-5-24 16:45

不错!有知音啊。

用户1415052 2010-5-24 15:42

谢谢老师指导
相关推荐阅读
allen_zhan 2023-02-27 19:08
对"三极管"译名由来的探讨
想讨论一个有意思的话题:今天中国大陆的电子业界, 为何将 BJT 称呼为 "三极管"? 或因其象形, 前辈自行进行随意的不严谨定义么? 带着疑问我们做了一下延伸查阅, 或得出这样的结论, 即中译名"三...
allen_zhan 2023-02-19 18:15
对知乎提问"为何三极管的一个PN结工作在反偏"的回复
将这个回复, 也发表在博文中, 作为自己的一个学习笔记叭.知乎问题: "三极管里面的PN结相当于二极管,为什么里面PN结加反向电压也能导通?"我的回复:首先, 二极管的"反向"概念, 容易给初学者某种...
allen_zhan 2023-02-18 10:17
从肖特基二极管到PN结与三极管
最近数个工作日的兴趣是回顾电子基础器件的发明/发展历史, 期待夯实技术基础的底蕴. 在学习与搜索资料的过程中, 顺便对知乎的一个同学的基础问题, 进行了回复. 不小心回复一下就成了千字文, 觉得挺有趣...
allen_zhan 2023-01-28 11:53
微功率 ISM 频率探讨相关文档组总结
不知不觉, 自开启关于微功率频率的话题起, 即从第一份文章写就到今天总结之日, 已经接近 10 个工作日左右. 早先的想法是对工程界未来的微功率设备相关项目, 从项目规划开始, 对选择系统, 频率, ...
allen_zhan 2023-01-27 22:50
关于 LoRa 应用场景的讨论
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. "第52号文" 对 470MHz 的约束引自 如下:(四)民用计量仪表限在建筑楼宇、住宅小区及村庄等小范围内组网应用,任意时刻限...
allen_zhan 2023-01-25 13:24
ISM 频段中 2.4G 与 5.8GHz 设备的使用与限制
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. ISM 频段定义中的 2.4G 与 5.8GHz正如同 文中确定的, 2.4G, 5.8GHz 属于中国大陆 ISM 频段的定义...
我要评论
2
17
关闭 站长推荐上一条 /2 下一条