完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
很多单片机例如STM、NXP等都在硬件上实现了CRC计算引擎,上位机与其通信,如果有CRC32计算的话,需要统一两端的CRC32算法,网上找的一些我看都不靠谱,计算结果和单片机上的结果不一致,我贴一下我写的代码吧。
#include #include //{0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, ...} //hello: E6CE9AC2 static uint32_t CRC32Table[256]; void CRC32_Init(int order) { uint32_t poly; int i; if(order) poly = 0x4C11DB7; else poly = 0xEDB88320; for(i = 0; i < 256; i++) { uint32_t crc = order ? i << 24 : i; int j; for (j = 0; j < 8; j++) { if(order) { crc = (crc & 0x80000000) ? (poly ^ (crc << 1)) : (crc << 1); } else { crc = (crc & 1) ? (poly ^ (crc >> 1)) : (crc >> 1); } } CRC32Table = crc; } } uint32_t CRC32_Calc(void *buf, int len) { uint32_t crc = -1; int i; for(i = 0; i < len; i++) { uint8_t b = *((uint8_t *)buf + i); crc = CRC32Table[b ^ (crc >> 24)] ^ (crc << 8); } return crc; } int main(int argc, char *argv[]) { uint32_t crc; CRC32_Init(1); crc = CRC32_Calc("hello", 5); printf("hello: %08Xn", crc); } |
|
|
|
只有小组成员才能发言,加入小组>>
3310 浏览 9 评论
2991 浏览 16 评论
3492 浏览 1 评论
9057 浏览 16 评论
4086 浏览 18 评论
1175浏览 3评论
603浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
596浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2333浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 15:48 , Processed in 1.181797 second(s), Total 78, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号