这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » [学习笔记]竟然还有不到10行的校验算法?

共8条 1/1 1 跳转至

[学习笔记]竟然还有不到10行的校验算法?

院士
2024-01-24 17:51:51   被打赏 50 分(兑奖)     打赏

LRC校验算法

引言

 今天在工作上遇到了一个任务,任务主要是把binary的数据保存到片外Flash上面。我的任务只是提供这个binary的文件,在系统运行后,我需要在Flash的保存地址上再回读这个binary文件,解析并运行。简单设计了一个文件info的头结构体,仅有16字节。想来想去,还是添加一个头部数据校验字段,以保证头部信息数据的正确性。这次我选择了LRC校验算法。

正文

 LRC(Longitudinal Redundancy Check)纵向冗余校验算法是一种用于检测数据传输错误的技术,通过在数据块中添加冗余信息,使得接收方可以通过校验算法验证数据的完整性。LRC校验算法简单、高效,适用于数据传输和存储中的错误检测。

一、LRC校验算法的基本原理

 LRC校验算法就是将参与校验的数据求和,取其低8位的补码为校验码。LRC算法原理也清晰的表明,校验字段的位置并不影响结果。

lrc01.png

二、LRC校验算法的实现

 LRC校验算法的实现相对简单,我们以Modbus-ASCII协议中的LRC算法说明为基准,并以开源的FreeModbus协议栈的实现为示例:

static UCHAR prvucMBLRC( UCHAR * pucFrame, USHORT usLen ){
    UCHAR ucLRC = 0;  /* LRC char initialized */
    while( usLen-- ){
        ucLRC += *pucFrame++;   /* Add buffer byte without carry */
    }
    /* Return twos complement */
    ucLRC = ( UCHAR ) ( -( ( CHAR ) ucLRC ) );
    return ucLRC;
}

 一共9行代码,是不是超级简单~~

三、LRC校验算法的优缺点

 LRC校验算法的优点主要包括:简单易实现、运算速度快、适用应用场景多等。然而,LRC校验算法也存在一些缺点:

 1. 对于较长的数据块,LRC校验算法的检测能力较弱。这是因为LRC校验算法是基于字节的求和运算,当数据块长度较长时,单个字节的错误可能不会影响整个数据块的校验结果。

2. LRC校验算法无法纠正传输过程中的错误。一旦检测到错误,接收方只能选择纠正或重传数据块。

3. LRC校验算法无法检测数据块是否被篡改。如果数据块在传输过程中被篡改,即使校验码一致,接收方也无法得知数据的真实性。

四、总结

 LRC校验算法是一种简单、高效的错误检测技术,对于校验数据量较小(小于256字节)的应用场景较为适合。然而,对于需要更高检测能力的场景,可能需要选择更复杂的校验算法,如CRC算法或更高级的纠错编码技术。在实际应用中,根据具体需求选择合适的校验算法是至关重要的。





关键词: 校验和     算法     LRC    

高工
2024-01-24 19:10:33     打赏
2楼

学习了


专家
2024-01-24 19:11:24     打赏
3楼

厉害


院士
2024-01-25 10:08:31     打赏
4楼

LRC校验还无法检测出来大小端的错误。


高工
2024-01-25 11:24:22     打赏
5楼

我一直和它叫检验和算法。原来人家有这么高大上的说法啊


专家
2024-01-26 07:17:04     打赏
6楼

学习了,谢谢分享!


助工
2024-01-26 10:10:03     打赏
7楼

这个学习了,看来和楼上一样,我也叫校验和


工程师
2024-02-15 00:40:03     打赏
8楼

学习了,谢谢分享!


共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]