论坛风格切换切换到宽版
发帖 回复
返回列表  提醒:不能用迅雷等P2P下载,否则下载失败标(二级)的板块,需二级才能下载,没二级不要购买,下载不了
  • 988阅读
  • 2回复

[技术文章]支持分包计算CRC32的源码分享 [复制链接]

上一主题 下一主题
离线ajtdnta
 

性别:
人妖
发帖
9
金币
9
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看楼主 倒序阅读 使用道具 0楼 发表于: 2020-08-14
/* ?GZ?HK|  
单片机(ARM)OTA时经常会用到CRC来校验接收文件的正确性,由于接收是分包的,整个包内容是否正确,可以通过每接收一包进行一次校验 ,.gI'YPQC  
直到所有包接收完成,也可以在所有数据接收完成后,从flash中一次性计算,但是都面临分包计算的过程,除非单片机内存足够大,所以我们还 2[Qzx%Vp  
是不要去想不太现实的事实,就用下面这个计算函数吧。 &)~LGWBdC  
*/ mL, {ZL ^  
unsigned int Xcrc32(unsigned int crc, const void *base, unsigned int len) +A_jm!tJS(  
{ Dt]FmU  
    unsigned int crc32 = 0; Qbj:^{`>(  
    unsigned char *p = (unsigned char *)base; Ga *  
    const unsigned int table[16] = { LGCeYXic  
        0x00000000, 0x1DB71064, 0x3B6E20C8, 0x26D930AC, 0x76DC4190, 0x6B6B51F4, 0x4DB26158, 0x5005713C, Lr>4~1:`  
        0xEDB88320, 0xF00F9344, 0xD6D6A3E8, 0xCB61B38C, 0x9B64C2B0, 0x86D3D2D4, 0xA00AE278, 0xBDBDF21C ! }awlv;  
    }; 0`WZ  
Lhgs|*M  
        crc32 = table[(crc ^  *p        ) & 0x0F] ^ (crc >> 4); ;Y &2G'  
    crc32 = table[(crc32 ^ (*p++ >> 4)) & 0x0F] ^ (crc32 >> 4); C4C!-12  
        len--; l?beqw:  
    while (len--) { K*MI8')  
        crc32 = table[(crc32 ^  *p        ) & 0x0F] ^ (crc32 >> 4); 6Qm .k$[  
        crc32 = table[(crc32 ^ (*p++ >> 4)) & 0x0F] ^ (crc32 >> 4); VqB9^qJ]!  
    } gE!`9#..  
    return crc32; K;f=l5  
} &-Z#+>=H(  


评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

一般

差劲
离线墙头草

性别:
人妖
发帖
1213
金币
2022
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 1楼 发表于: 2020-08-27


离线phangbob

性别:
人妖
发帖
52
金币
86
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 2楼 发表于: 2020-09-22


快速回复
限150 字节
 
上一个 下一个