0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

累加和校验算法的实现

Q4MP_gh_c472c21 来源:嵌入式ARM 作者:嵌入式ARM 2021-03-04 15:57 次阅读

前言

因为外界总会对电路存在或多或少的干扰,对于数字信号,很可能导致传输的数据出现千差万别。

对于很多需要传输数据的场合,尤其是一些数据可能会影响一些硬件的动作(诸如嵌入式的一些设备、机器人等),错误的数据可能会带来一些隐性风险,想想都可怕。

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

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

说道今日主角:累加和校验算法,又名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语言的代码示例。

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

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

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19118

    浏览量

    305009
  • 累加
    +关注

    关注

    0

    文章

    6

    浏览量

    6807
  • 校验算法
    +关注

    关注

    0

    文章

    5

    浏览量

    6605

原文标题:累加和校验算法在嵌入式中的应用~

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【「从算法到电路—数字芯片算法的电路实现」阅读体验】+内容简介

    的乘法器和除法器设计,在不同专业芯片领域有着广泛应用的数字信号发生器、复数求模求角度运算器、普通滤波器、E△ADC中使用的抽取滤波器、基于 E△结构实现的小数倍分频器、CRC校验器等。每个电路均给出了算法
    发表于 11-21 17:14

    【「从算法到电路—数字芯片算法的电路实现」阅读体验】+介绍基础硬件算法模块

    作为嵌入式开发者往往比较关注硬件和软件的协调。本书介绍了除法器,信号发生器,滤波器,分频器等基本算法的电路实现,虽然都是基础内容,但是也是最常用到的基本模块。 随着逆全球化趋势的出现,过去的研发
    发表于 11-21 17:05

    【「从算法到电路—数字芯片算法的电路实现」阅读体验】+第九章sigma delta adc阅读与分享

    ,其实名字已经可以说明其本质了sigma 累加delta偏差即对偏差的累加,不就是总的偏差吗,偏差为多了就减少点,偏差为少了就增加多点,不就是多退少补吗,其核心的是累加所以和实现高精度
    发表于 11-20 13:58

    【「从算法到电路—数字芯片算法的电路实现」阅读体验】+一本介绍基础硬件算法模块实现的好书

    作为嵌入式开发者往往比较关注硬件和软件的协调。本书介绍了除法器,信号发生器,滤波器,分频器等基本算法的电路实现,虽然都是基础内容,但是也是最常用到的基本模块,本书的内容比较对本人胃口。 我们先来
    发表于 11-20 13:42

    C加密算法实现

    电子发烧友网站提供《C加密算法实现.pdf》资料免费下载
    发表于 09-20 11:10 1次下载
    C加密<b class='flag-5'>算法</b>的<b class='flag-5'>实现</b>

    【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(8)SPI 模块介绍

    串行外设接口(Serial Peripheral Interface,缩写为 SPI) 提供了基于SPI 协议的数据发送和接收功能, 可以工作于主机或从机模式。 SPI 接口支持具有硬件 CRC 计算和校验的全双工和单工模式。
    的头像 发表于 08-17 09:36 624次阅读
    【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(8)SPI 模块介绍

    三菱plc累加指令怎么用

    中,累加指令通常使用ADD指令来实现。以下是关于三菱PLC累加指令的详细介绍。 累加指令的基本概念 累加指令是一种对数据进行求和操作的指令,
    的头像 发表于 06-20 11:34 3718次阅读

    FPGA能实现什么样的算法

    FPGA功能如此强大,请问用FPGA能实现或者比较适合实现什么样的算法
    发表于 05-26 20:18

    CRC(循环冗余校验)应用举例

    CRC(循环冗余校验)应用举例
    的头像 发表于 05-16 16:12 1192次阅读

    Hex文件格式CRC校验,怎么编写计算校验的程序?

    其中的一条记录:1011000071079907E8071008D206FA0671079907D0 0xD0为校验,但不知道怎么编写计算校验的程序。 校验和的算法为:计算从0x3A
    发表于 05-16 06:53

    浅析MCU通信、存储常用的简单校验算法

    UART有一个奇偶校验,CAN通信有CRC校验。Modbus、MAVlink、USB等通信协议也有校验信息。
    的头像 发表于 03-07 10:56 513次阅读
    浅析MCU通信、存储常用的简单<b class='flag-5'>校验算法</b>

    总线数据传输的要求有哪些 can总线和lin总线的区别

    数据传输应该是可靠的,即确保数据无误、完整地从发送方传输到接收方。这可以通过使用纠错编码、检验和校验等威廉希尔官方网站 来实现
    发表于 01-10 16:18 1573次阅读

    fpga报告crc故障是什么意思

    方法,通过对发送的数据进行计算并附加到数据末尾,接收方能够使用相同的校验算法来检测传输中的错误。CRC可以检测多种不同类型的错
    的头像 发表于 01-04 11:06 1474次阅读

    虹科威廉希尔官方网站 | 保障数据传输稳定性:BabyLIN产品的CRC算法实现

    CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式。CAN协议中,总线通信节点也常采用CRC算法对各种总线传输的数据进行校验
    的头像 发表于 01-02 17:23 543次阅读
    虹科威廉希尔官方网站
 | 保障数据传输稳定性:BabyLIN产品的CRC<b class='flag-5'>算法</b><b class='flag-5'>实现</b>

    虹科威廉希尔官方网站 |保障数据传输稳定性:BabyLIN产品的CRC算法实现

    文章将以CRC8校验为例,介绍在BabyLIN产品中如何使用CRC校验算法。 CRC校验原理 在CAN报文中,增加Checksum校验,能够用来检测
    的头像 发表于 01-02 10:45 502次阅读
    虹科威廉希尔官方网站
|保障数据传输稳定性:BabyLIN产品的CRC<b class='flag-5'>算法</b><b class='flag-5'>实现</b>