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

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

    关注

    5186

    文章

    20146

    浏览量

    328782
  • 累加
    +关注

    关注

    0

    文章

    6

    浏览量

    6931
  • 校验算法
    +关注

    关注

    0

    文章

    5

    浏览量

    6723

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    硬件循环冗余校验(CRC)模块介绍

    CRC是一种错误检测码,用于检测数据传输或存储中的意外更改。它通过对数据应用特定的算法生成一个固定长度的校验值。这个校验值附加在数据后面,接收方可以重新计算CRC并与接收到的校验值比较
    发表于 11-21 07:39

    CS校验原理与应用

    原理: CS校验对数据块中所有字节(或字)进行累加求和,最终结果取模(通常是模 256 或 65536)后取补码(或直接截断)作为校验值。 例如:8位校验和 = (所有字节之和) mo
    发表于 11-19 07:51

    CRC校验的原理和应用

    原理: CRC校验将数据视为一个二进制多项式,用一个预先定义好的生成多项式(Generator Polynomial) 进行模2除法,得到的余数作为CRC校验码。 例如:数据多项式 ÷ 生成多项式
    发表于 11-14 06:48

    CRC校验的本质和物理意义

    校验的数学本质 1. 模2除法与多项式表示 Modbus RTU采用的CRC-16算法基于多项式除法运算,其核心特征包括: 生成多项式:0x8005(标准表示)或0xA001(查表法优化) 初始值
    发表于 11-13 07:58

    电能质量在线监测装置自诊断功能的软件校验具体是如何实现的?

    电能质量在线监测装置自诊断的软件校验,核心是 基于电网物理规律、通信协议规范和算法执行逻辑,设定 “预期规则”,通过对比实际运行数据与预期值的偏差 ,识别隐性故障(如参数漂移)、逻辑异常(如数据矛盾
    的头像 发表于 11-06 10:44 503次阅读

    SM4算法实现分享(一)算法原理

    ,Xi、Yi、rki为字,i=0,1,2,…,31。则本算法的加密实现为: 本算法的解密实现与加密实现结构是相同的,不同的只是提供的轮
    发表于 10-30 08:10

    AES加解密算法逻辑实现及其在蜂鸟E203SoC上的应用介绍

    这次分享我们会简要介绍AES加解密算法的逻辑实现,以及如何将AES算法做成硬件协处理器集成在蜂鸟E203 SoC上。 AES算法介绍 AES算法
    发表于 10-29 07:29

    针对AES算法的安全防护设计

    软件中随机延迟的使用通常被认为是对抗侧信道攻击的一般对策,但随机延迟不能阻止攻击,只能让攻击变得复杂。因此基于蜂鸟E203平台的软硬件实现方式,我们的安全防护设计也会从软件和硬件两个方面进行联合
    发表于 10-28 07:38

    基于E203 RISC-V的音频信号处理系统 -协处理器的乘累加过程

    。 硬件加速简介 图1 乘积累加运算单元 乘积累加运算单元电路,类似于DSP中的MAC指令,能够快速的实现 C=B+AB格式的运算功能 图2 卷积运算单元 卷积运算电路,采用3个乘法器
    发表于 10-28 06:18

    基于FPGA实现FOC算法之PWM模块设计

    哈喽,大家好,从今天开始正式带领大家从零到一,在FPGA平台上实现FOC算法,整个算法的框架如下图所示,如果大家对算法的原理不是特别清楚的话,可以先去百度上学习一下,本教程着重介绍
    的头像 发表于 07-17 15:21 3120次阅读
    基于FPGA<b class='flag-5'>实现</b>FOC<b class='flag-5'>算法</b>之PWM模块设计

    基于FPGA的压缩算法加速实现

    本设计中,计划实现对文件的压缩及解压,同时优化压缩中所涉及的信号处理和计算密集型功能,实现对其的加速处理。本设计的最终目标是证明在充分并行化的硬件体系结构 FPGA 上实现算法时,可
    的头像 发表于 07-10 11:09 2076次阅读
    基于FPGA的压缩<b class='flag-5'>算法</b>加速<b class='flag-5'>实现</b>

    用TXT编辑器打开十六进制文件,如何知道校验和值?

    我从客户那边得到了一个 pmg1-s3 十六进制文件,我想把它和校验和提供给集成电路编程工厂。 1.用 TXT 编辑器打开十六进制文件,如何知道校验和值? 附带的是十六进制文件。 2. 另一个问题是
    发表于 05-23 07:49

    相位累加器的实现原理

    标题中所提到的DDS,我感觉这两个放一起也可以,因为DDS的核心思想就是使用的相位累加器。那么这玩意儿的作用是啥?简单来说就是在FPGA工作主频之下,可以生成任意频率的周期信号出来。
    的头像 发表于 05-16 13:56 879次阅读
    相位<b class='flag-5'>累加</b>器的<b class='flag-5'>实现</b>原理

    基于Verilog语言实现CRC校验

    CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的
    的头像 发表于 03-24 10:36 2178次阅读
    基于Verilog语言<b class='flag-5'>实现</b>CRC<b class='flag-5'>校验</b>

    PID控制算法的C语言实现:PID算法原理

    在工业应用中 PID 及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握 PID 算法的设计与实现过程,对于一般的研
    发表于 02-26 15:24