在“使用IAR Embedded Workbench和MCU的CRC模块来检查代码的完整性”一文中,介绍了如何在IAR Embedded Workbench中配置生成对应代码区域的CRC校验码,然后在运行过程中使用MCU内嵌的CRC硬件模块计算对应代码区域的CRC校验码,并和之前存储的CRC校验码进行比较来检查对应代码区域的完整性。
CRC算法有很多种,一般MCU内嵌的CRC硬件模块支持的CRC算法种类是固定的,所以需要在IAR Embedded Workbench中选择对应的Checksum的CRC算法来匹配MCU的CRC模块。
本文主要以CRC32算法为例,介绍如何在IAR Embedded Workbench中选择对应Checksum的CRC算法来匹配MCU的CRC模块。
CRC32算法简介
CRC32算法有很多种,下面是对应CRC32算法的一个简单总结:
对应CRC32算法主要跟对应的5个参数相关:Poly(多项式),Init(初始值),RefIn(输入值反转),RefOut(输出值反转)和XorOut(结果异或值)。理论上这5个参数组合最多可以有非常多种算法,不过实际使用中一般以上面几种为主。
在IAR Embedded Workbench中选择对应Checksum的CRC算法
IAR Embedded Workbench中Checksum选项中CRC算法的配置与对应CRC算法的参数对应关系如下:
下面通过两个例子来介绍如何在IAR Embedded Workbench中选择对应Checksum的CRC算法(Project > Options > Linker > Checksum > Generate checksum)。
CRC-32
Algorithm: 选择 “CRC32”(对应的Poly自动选择为0x04C11DB7)
Complement: 选择 “1’s complement”(对应的XorOut为0xFFFFFFFF)
Initial value: 输入“0xFFFFFFFF”(对应的Init为0xFFFFFFFF)
Bit order: 选择 “LSB first”(对应RefIn = TRUE, RefOut = TRUE)
CRC-32/MPEG-2
Algorithm: 选择 “CRC32”(对应的Poly自动选择为0x04C11DB7)
Complement: 选择 “As is”(对应的XorOut为0x00000000)
Initial value: 输入“0xFFFFFFFF”(对应的Init为0xFFFFFFFF)
Bit order: 选择 “MSB first”(对应RefIn = FALSE, RefOut = FALSE)
总结
本文主要以CRC32算法为例,介绍了如何在IAR Embedded Workbench中选择对应Checksum的CRC算法来匹配MCU的CRC模块,提高对应Checksum校验代码的效率。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !