OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8057|回复: 3

还是CRC,CRC7的查表算法

[复制链接]

9

主题

29

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2013-11-24
在线时间
0 小时
发表于 2014-1-2 10:21:40 | 显示全部楼层 |阅读模式
谢谢原子给上次的《分享)给想了解CRC校验的朋友们推荐几篇文章》裤子。
感谢大家支持,今天贴出来我写的CRC7和我抄的CRC16校验程序。

得说说CRC7,很别扭,因为不够一个字节,半字节的太麻烦,不想做。但是就是因为一个bit,搞了2小时才明白。

CRC7的查表网上找不到,自己做的,结果验证过是对的,低位对齐。其实pudn上有,但我没钱。


原来一直拿来主义,自己做的时候,才会问自己
“你真的明白了吗?”
我知道答案,不,是真没明白!惭愧啊。
其实到现在也不明白。。。。

不说了,很短,就不发附件了。还是基于查表的。
需要建表,两个表共768bytes,很不小了。不喜欢的可以直接算。

写的不好大家多指教。





  1. u8 CRC7Tbl[256];
  2. u16 CRC16Tbl[256];
  3. //创建两个表
  4. //CRC7Tbl和CRC16Tbl
  5. void CreatTbl(void)
  6. {
  7. u16 dat16,regs16;
  8. u8 dat8,regs8;
  9. u16 i,j;

  10. for(i = 0 ; i < 256 ; i++)
  11. {
  12. dat16 = i << 8;
  13. regs16 = 0;
  14. for(j = 0 ; j < 8 ; j++)
  15. {
  16. if((dat16 ^ regs16) & 0x8000)
  17. regs16 = (regs16 << 1) ^ CRC16_POLY;
  18. else
  19. regs16 <<= 1;
  20. dat16 <<= 1;
  21. }
  22. CRC16Tbl = regs16;
  23. }
  24. for(i = 0 ; i < 256 ; i++)
  25. {
  26. regs8 = 0;
  27. dat8 = i ;
  28. for(j = 8 ; j > 0 ; j--)
  29. {
  30. if((dat8 & 0x80)^ (regs8 & 0x80) & 0x80)
  31. regs8 = (regs8 << 1) ^ (CRC7_POLY << 1);
  32. else
  33. regs8 <<= 1;
  34. dat8 <<= 1;
  35. }
  36. CRC7Tbl = regs8  ;
  37. }
  38. }
  39. //查表
  40. //crc7查表
  41. u8 CRC7Check(u8 *p,u8 len)
  42. {
  43. u8 regs,i,data;
  44. regs = 0;
  45. for(i = 0 ;i < len; i++)
  46. {
  47. regs = CRC7Tbl[*p++ ^ regs ];
  48. }
  49. return regs>>1;
  50. }
  51. //CRC16查表
  52. u16 CRC16Check(u8 *p,u8 len)
  53. {
  54. u16 regs;
  55. u8 i;
  56. regs = 0;
  57. for(i = 0 ; i < len ; i++)
  58. {
  59. regs = (regs << 8) ^ CRC16Tbl[(regs >> 8) ^ *p++];
  60. }
  61. return regs;
  62. }



是不是加上序号,复制过来用的时候很烦人?
就是要你烦,要你知道,不只是拿来那么简单的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

29

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2013-11-24
在线时间
0 小时
 楼主| 发表于 2014-1-2 10:24:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-1-2 14:30:02 | 显示全部楼层
谢谢分享.
回复 支持 反对

使用道具 举报

72

主题

179

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2014-10-15
在线时间
132 小时
发表于 2023-6-5 14:39:44 | 显示全部楼层
加上序号倒是不烦人,关键得出的校验值不对
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 06:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表