CRC校验又称为循环冗余校验,是数据通讯中常用的一种校验算法。它可以有效的判别出数据在传输过程中是否发生了错误,从而保障了传输的数据可靠性。

CRC校验有多种方式,如:CRC8、CRC16、CRC32等等。在实际使用中,我们经常使用CRC16校验。CRC16校验也有多种,如:1005多项式、1021多项式(CRC-ITU)等。在这里我们不讨论CRC算法是怎样产生的,而是重点落在几种算法的C51程序的优化上。

计算CRC校验时,最常用的计算方式有三种:查表、计算、查表+计算。一般来说,查表法最快,但是需要较大的空间存放表格;计算法最慢,但是代码最简洁、占用空间最小;而在既要求速度,空间又比较紧张时常用查表+计算法。

下面我们分别就这三种方法进行讨论和比较。这里以使用广泛的51单片机为例,分别用查表、计算、查表+计算三种方法计算 1021多项式(CRC-ITU)校验。原始程序都是在网上或杂志上经常能见到的,相信大家也比较熟悉了,甚至就是正在使用或已经使用过的程序。

编译平台采用 Keil C51 7.0,使用小内存模式,编译器默认的优化方式。

常用的查表法程序如下,这是网上经常能够看到的程序范例。因为篇幅关系,省略了大部分表格的内容。

code unsigned int Crc1021Table[256] = {

0x0000, 0x1021, 0x2042, 0x3063,... 0x1ef0

};

unsigned int crc0(unsigned char *pData, unsigned char nLength)

{

crc16校验c语言单片机实现,三种常用的CRC16校验算法的C51程序的优化相关推荐

  1. bcc校验c语言实现,Linux BCC(异或校验)计算命令行工具

    BCC(Block Check Character/信息组校验码),因校验码是将所有数据异或得出,故俗称异或校验.具体算法是:将每一个字节的数据(一般是两个16进制的字符)进行异或后即得到校验码. 例 ...

  2. 51单片机:HCSR04超声波测距模块及1602显示—C51程序(超详细)

    测试完成于STC89C516单片机,晶振12MHZ.超声波模块Echo=P1^0.Trig=P1^1,1602液晶8位数据口=P0.E=P2^7.RS=P2^6.RW=P2^5.. 程序文件分为4部分 ...

  3. CRC16校验 C语言实现

    文章目录 1 crc.c 2 crc.h 循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用 ...

  4. crc16查表法c语言实现,CRC校验查表法原理及实现(CRC-16)

    绪论 在网上浏览了不少关于CRC校验的文章,基本上都是针对CRC校验原理的阐述以及关于CRC校验查表法的实际应用以及具体软件实现方法. 至于查的表是怎么来的,软件为何要这样实现不少文章并无说明.本篇文 ...

  5. 怎么得到16位校检和-c语言,16位CRC校验C语言算法.pdf

    16位CRC校验C语言算法.pdf CRC 算法原理及C 语言实现 摘 要 本文从理论上推导出CRC算法实现原理,给出三种分别适应不同计算机或微控 制器硬件环境的C语言程序.读者更能根据本算法原理,用 ...

  6. crc校验c语言程序,C语言:CRC校验

    一.CRC码 CRC:Cylic Reduancy check译作汉语就是循环冗余校验码. 二.XOR XOR:逻辑运算符异或,不知道用符号怎么写,总之其运算法则是,不同为1,相同为0. 三.用XOR ...

  7. C语言单片机等待询问_单片机很好玩8,温度太高就报警,制作一个智能室内温度湿度计...

    第二节和第三节介绍了如何使用C语言编程单片机,制作 LED 闪烁小灯,以及 LED "呼吸灯".上一节介绍了利用 DHT11 温湿度传感器测量室内温度和湿度的方法,本节将把它们结合 ...

  8. 单片机 switch c语言,单片机入门-C51语言switch-case语句电路应用实例

    原标题:单片机入门-C51语言switch-case语句电路应用实例 教学视频如下: 本例介绍switch-case选择语句的应用,用按钮控制LED灯作为实例,介绍如何使用该语句做设计.绘制了相应的电 ...

  9. c语言单片机程序设计例,51单片机C语言程序设计经典实例(第2版)

    项目一 单片机系统的软.硬件开发环境 任务1 单片机最小应用系统的组成 任务2 Keil C51编译软件的使用 任务3 Proteus 80仿真软件的使用 项目二 C51程序设计语言基础 任务1 C ...

最新文章

  1. 广告条随滚动条的移动而移动
  2. 二分图的判定(模板)
  3. 深圳内推 | 粤港澳大湾区数字经济研究院招聘NLP算法研究员(可实习)
  4. oracle中实现continue,break .
  5. php larve,封装composer包,实现thinkphp、larverl、yii框架中使用(使用框架实现回调方法)...
  6. IE 8 HTML Parsing Error:Unable to modify the parent container element before the child element is...
  7. Atitit spring5 集成 mybatis 注解班
  8. 中孚计算机保密 卸载,智华计算机终端保密检查系统怎样卸载
  9. jrtplib 打包做了哪些事_使用jrtplib打包发送h264数据,关使用vlc|mplayer播放 | 学步园...
  10. lucene全文检索包括双层PDF
  11. 更改键盘布局_什么是键盘布局? 如何更改?
  12. JavaWeb正则表达式2-不情愿模式
  13. 区块链技术入门,涉及哪些编程语言?
  14. 计算机系统:异常控制流
  15. 蚂蚁代理免费代理ip爬取(端口图片显示+token检查)
  16. linux svn e170001 认证失败,jenkins - svn: E170001报错的原因以及解决方案
  17. .net core 使用 Hangfire 实现定时、延时任务
  18. 设计问卷调查有哪些技巧?
  19. 关于 Kubernetes中deployment的一些笔记
  20. 一组图片看完“自动驾驶”发展史

热门文章

  1. 宇宙最强,meltdown论文中英文对照版(三)
  2. Web开发了一个完整精美的聊天室(登录部分引入了Vue技术)
  3. html5 自动点击按钮,自动击键神器!一键实现自动点击功能!关键模拟应用
  4. 启用vsftpd日志及其解读
  5. fastapi官方文档翻译 -目录
  6. python如何撤销上一步_python代码运行到某一步能返回到前面某一步吗?
  7. 城乡规划编制资质很多地区已经开通新办了,那你知道怎么办吗?
  8. git clone报错:repository ‘xxxxxxxxx’does not exist
  9. vue 路由三种写法方式
  10. 【PMP】关键路径法与关键链法