累加和校验算法(CheckSum算法)「建议收藏」

累加和校验算法(CheckSum算法)「建议收藏」因为外界总会对电路存在或多或少的干扰,对于数字信号,很可能导致传输的数据出现千差万别。对于很多需要传输数据的场合,尤其是一些数据可能会影响一些硬件的动作(诸如嵌入式的一些设备、机器人等),错误的数据可能会带来一些隐性风险,想想都可怕。由于本人是嵌入式相关领域的,平时玩的都是单片机,当然单片机的性能千差万别,不过很多的性能都只能说是勉强够用,毕竟成本考虑。所以今天的校验说法,比较简单,但是有…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

因为外界总会对电路存在或多或少的干扰,对于数字信号,很可能导致传输的数据出现千差万别。对于很多需要传输数据的场合,尤其是一些数据可能会影响一些硬件的动作(诸如嵌入式的一些设备、机器人等),错误的数据可能会带来一些隐性风险,想想都可怕。

由于本人是嵌入式相关领域的,平时玩的都是单片机,当然单片机的性能千差万别,不过很多的性能都只能说是勉强够用,毕竟成本考虑。

所以今天的校验说法,比较简单,但是有效,尤其是一些性能一般的硬件。

说道今日主角:累加和校验算法,又名CheckSum算法。至于出处,这里就不考究了。

这种算法的实现:

发送方:对要数据累加,得到一个数据和,对和求反,即得到我们的校验值。然后把要发的数据和这个校验值一起发送给接收方。

接收方:对接收的数据(包括校验和)进行累加,然后加1,如果得到0,那么说明数据没有出现传输错误。(注意,此处发送方和接收方用于保存累加结果的类型一定要一致,否则加1就无法实现溢出从而无法得到0,校验就会无效)

还是举个例子:

发送方:要发送0xA8,0x50,我们使用unsigned char(8位)来保存累加和,即为0xF8(0b11111000),取反得到校验和为0x07(0b00000111)。然后将这三个数据发送出去。

接收方:如果接收正确,这三个数据的累加和就是(0b11111111),此时加1,则得到的结果为0(实际得到的应该是0b100000000,但是由于是使用unsigned char(8位)来保存累加和,所以高位被截取掉,只剩下了低八位的8个0).

由上面的例子,我们可以知道算法的目的是:使累加和和校验值相加得到一个二进制下每一位都是1的结果,这个结果很明显很好处理,这种算法实现起来也很简单,下面给出C语言的代码示例。

发送方:以下是如何得到校验值的代码,结果就是我们想要的校验值。

uint8_t TX_CheckSum(uint8_t *buf, uint8_t len) //buf为数组,len为数组长度
{ 
    uint8_t i, ret = 0;

    for(i=0; i<len; i++)
    {
        ret += *(buf++);
    }
     ret = ~ret;
    return ret;
}

Jetbrains全家桶1年46,售后保障稳定

接收方:输入已包含发送发发来的校验值,如果函数返回的值如果是0,说明数据正确。

uint8_t RX_CheckSum(uint8_t *buf, uint8_t len) //buf为数组,len为数组长度
{ 
    uint8_t i, ret = 0;

    for(i=0; i<len; i++)
    {
        ret += *(buf++);
    }
     ret = ret;
    return ret+1;
}

更多精彩内容,请关注公众号《嵌入式小散修》。
累加和校验算法(CheckSum算法)「建议收藏」

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210067.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Leetcode 166 Fraction to Recurring Decimal

    Leetcode 166 Fraction to Recurring Decimal

    2022年1月31日
    33
  • 河北省理科2001——2010年一分一档表[通俗易懂]

    河北省理科2001——2010年一分一档表[通俗易懂]VirtualBox.bat:C:cd”\ProgramFiles\Oracle\VirtualBox”VBoxManagestartvm”CentOS-6.5″–typeheadless

    2022年7月13日
    42
  • mysql报错日志文件在哪_windows硬件报错日志

    mysql报错日志文件在哪_windows硬件报错日志1.cmd打开服务,找到mysql服务,查看属性中my.ini配置文件所在位置:2.打开my.ini配置文件,查看datadir配置:datadir=C:/ProgramData/MySQL/MySQLServer5.7/Data此目录存储了错误日志文件3.查看错误日志文件名SHOWVARIABLESLIKE”%error%”;…

    2022年10月13日
    0
  • mfc控件工具栏怎么打开_Qt界面库

    mfc控件工具栏怎么打开_Qt界面库BCGControlBarProfessionalforMFC和BCGSuiteforMFCv33.0正式发布!此版本包括对每个显示器DPI感知的支持等,欢迎下载相关产品体验~

    2022年10月8日
    0
  • 理解51单片机最小系统的工作原理「建议收藏」

    理解51单片机最小系统的工作原理「建议收藏」51单片机最小应用系统概述要想使用单片机,第一个要搭建的电路就是单片机的最小系统,有了这个最小系统单片机就可以去正常的工作,即使没有其他的外围电路(显示器啥的),也可以对单片机进行程序的编写,程序也可以在单片机里面正常的运行。其包括MCS-51系列芯片一块,(51初步认识)电源电路,时钟电路,复位电路。51单片机最小系统原理图1.电源电路任何的电子设备都需要给其供应相对应的工作电源才可以正常工作,此芯片可用+5V的直流电源供电电源电路2.时钟电路单片机的芯片是数字电路芯片,数字芯片要想正常

    2022年6月23日
    32
  • 白盒测试方法与黑盒测试方法简析

    白盒测试方法与黑盒测试方法简析白盒测试方法与黑盒测试方法简析白盒测试方法的逻辑覆盖法一、语句覆盖运行测试用例保证被测程序的每一条语句至少执行一次。二、判定覆盖判定覆盖也称为分支覆盖。运行测试用例保证被测程序的每一个判断的真假分支都至少执行一次。三、条件覆盖运行测试用例保证被测程序的每一个判断的每个条件的所有可能取值至少执行一次。四、判定-条件覆盖运行测试用例保证被测程序的每一个判断的每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。五、条件组合覆盖运行测试用例

    2022年9月26日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号