ImageVerifierCode 换一换
格式:DOC , 页数:19 ,大小:36.50KB ,
资源ID:7559630      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7559630.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(三种常用的CRC16校验算法的C51程序的优化.doc)为本站会员(HR专家)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

三种常用的CRC16校验算法的C51程序的优化.doc

1、三种常用的 CRC16 校验算法的 C51 程序的优化三种常用的 CRC16 校验算法的 C51 程序的优化 2009-10-10 09:34:17| 分类: 技术知识 | 标签: |字号大中小 订阅 CRC 校验又称为循环冗余校验,是数据通讯中常用的一种校验算法。它可以有效的判别出数据在传输过程中是否发生了错误,从而保障了传输的数据可靠性。CRC 校验有多种方式,如:CRC8、CRC16、CRC32 等等。在实际使用中,我们经常使用 CRC16 校验。CRC16 校验也有多种,如:1005 多项式、1021 多项式(CRC-ITU)等。在这里我们不讨论 CRC算法是怎样产生的,而是重点落在几

2、种算法的 C51 程序的优化上。计算 CRC 校验时,最常用的计算方式有三种:查表、计算、查表计算。一般来说,查表法最快,但是需要较大的空间存放表格;计算法最慢,但是代码最简洁、占用空间最小;而在既要求速度,空间又比较紧张时常用查表计算法。下面我们分别就这三种方法进行讨论和比较。这里以使用广泛的 51 单片机为例,分别用查表、计算、查表计算三种方法计算 1021 多项式(CRC-ITU)校验。原始程序都是在网上或杂志上经常能见到的,相信大家也比较熟悉了,甚至就是正在使用或已经使用过的程序。编译平台采用 Keil C51 7.0,使用小内存模式,编译器默认的优化方式。常用的查表法程序如下,这是网

3、上经常能够看到的程序范例。因为篇幅关系,省略了大部分表格的内容。code unsigned int Crc1021Table256 = 0x0000, 0x1021, 0x2042, 0x3063,. 0x1ef0 ;unsigned int crc0(unsigned char *pData, unsigned char nLength)unsigned int CRC16 = 0;while(nLength0)CRC16 = (CRC16 8) *pData) nLength-;pData+;return CRC16;编译后,函数 crc0 的代码为 68 字节,加上表格占用的 512 字

4、节,一共使用了 580 个字节的代码空间。下面是常见的计算法的程序:unsigned int crc2(unsigned char *ptr,unsigned char count)unsigned int crc =0;unsigned char i;while(count- 0)crc = ( crc(unsigned int)*ptr)0) da = (crc/256)/16; /* 暂存 CRC 的高四位 */crc 0;i-)if(crc.c0crc.x 4) (*ptr crc.x idataxdata ;3. 使用最小的变量类型,能使用整型时就不要使用长整型,能使用字符型时就不要

5、使用整型;4. 多使用局部变量,少使用全局变量、静态变量,这样可以充分利用 Keil 提供的变量覆盖技术。同时局部变量也要尽量使用寄存器变量;5. 少使用浮点数。使用浮点数需要连接浮点库,会增加大约 1K 的代码;而且浮点运算的速度是很慢的,没有特殊情况尽量使用定点数代替浮点数;6. 没有必要就不要使用 printf 等标准输入输出函数,它会增加大约 3K 的代码。7. 函数带有的参数不要太多,多了会影响效率;8. 注意 C51 的特点,按照 C51 的特点编写程序;9. 多用几种方法优化,比较后找出最佳方法;10. 注意软件的写法,有时一个写法上很小的变化就会有意想不到的效果。因为 Keil

6、 的优化是与上下文的程序相关的,对于不同的情况产生不同的优化。如果对比一下产生的汇编代码,就能够更加容易的找出不合理的代码,从而有针对性的优化了;11. 不要过于依赖 C51 提供的优化功能,能够自己优化的地方就自己手工优化了,程序不可能完成所有的事情;12. 不同版本的 C51(特别是 6.0 和 7.0 的版本与低于 6.0 的版本相比)产生的优化效果可能会不同,产生的代码会不完全一样,需要特别注意;13. 在循环中比较条件尽量与 0 作比较(这与 51 单片机的特点有关,对比一下编译产生的汇编代码就明白了) ,这样可以减少代码,加快速度。如:将 while( n 10 )修改为while( n != 0 );14. 在循环中比较中不要直接使用 n- 或 n+ ,而要分开写,这样产生的代码较小。如:while( n- != 0)修改为while(n != 0)n-;./其他代码15. 尽量不要使用太复杂的表达式,虽然这样程序简洁,但是对程序的调试不方便。只要能充分考虑到所使用的单片机的特点,在加上一些经验和技巧,就一定可以编写出高性能的程序来。本文作者:邵子扬 2003 年 9 月 22 日

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报