这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 综合技术» 物联网技术» [学习笔记]CRC-8校验算法实现

共1条 1/1 1 跳转至

[学习笔记]CRC-8校验算法实现

院士
2024-02-20 17:42:45 打赏

我们在上一篇帖子中,学习了CRC-8校验算法的实现原理。也是应论坛网友的回帖要求,在这里分享一下CRC-8校验算法的源代码示例,供大家参考,移植到自己的项目中。话不多说,先上源代码,再来解释:

unsigned char crc8_table[256]; void generate_crc8_table(unsigned char poly) { uint16_t i; uint8_t j, crc; for (i = 0; i < 256; i++) { crc = i; for (j = 0; j < 8; j++) { if (crc & 0x80) { crc = (crc << 1) ^ poly; } else { crc <<= 1; } } crc8_table[i] = crc; // printf("crc8_tbl[%d] = 0x%02X\r\n", i, crc); } } uint8_t calculate_crc8(unsigned char *data, int length, unsigned char poly) { unsigned char crc = 0; int i; for (i = 0; i < length; i++) { crc = crc8_table[crc ^ data[i]]; } return crc; } int main(int argc, char const *argv[]) { unsigned char data[] = {0x12, 0x34, 0x56, 0x78}; int length = sizeof(data) / sizeof(data[0]); unsigned char poly = 0x07; uint8_t crc_result; generate_crc8_table(poly); crc_result = calculate_crc8(data, length, poly); printf("CRC-8 cksum = 0x%02X\n", crc_result); return 0; }

在示例程序中:

generate_crc8_table()函数的作用是建立一张crc-8的查询表,以空间换些时间。我这里把生成函数贴出来,主要是为了大家能够学习到如何生成这个查询表,在项目中,我们仅需要在程序里面预置好这256个字节的数组即可。

calculate_crc8()函数的作用就是计算CRC-8的校验值了。将之前复杂的取余操作变更为了异或运算,加快了实现速度。毕竟,这点空间换回来的性能提升还是非常可观的。

今天有点小忙,过两天再为大家分享crc-16校验算法及实现源代码。





关键词: CRC-8 校验 算法 CRC

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]