ZHCAAO5A June 2020 – August 2021 ADS112C04 , ADS112U04 , ADS114S06 , ADS114S08 , ADS122C04 , ADS122U04 , ADS1235 , ADS1235-Q1 , ADS124S06 , ADS124S08 , ADS1259 , ADS1259-Q1 , ADS125H01 , ADS125H02 , ADS1260 , ADS1260-Q1 , ADS1261 , ADS1262 , ADS1263 , ADS127L01 , ADS131A02 , ADS131A04 , ADS131M04 , ADS131M06 , ADS131M08
从先前经过初始化并存储在存储器中的 CRC 表中检索字节值,而不是使用多个异或运算。
/**
* 基于先前存储在存储器中的查找表进行 CRC 计算。
*
* \详细信息:通过对表数据(这些数据是通过对多项式进行按位异或运算而得到并存储在存储器中的)
* 进行异或运算来计算出 CRC 值。
*
* \参数 uint8_t *data 是指向数据数组的指针。
* \参数 uint32_t length 是数据数组的长度。
*
* \返回 CRC 计算得到的 crc_t remainder。
*/
crc_t tableCRCcalc(uint8_t *data, uint32_t length)
{
crc_t remainder = REMAINDER_INIT;
uint32_t byte, u32i;
for(u32i = 0; u32i < length; u32i++) // 对于数据包中的每个字节
{
byte = data[u32i] ^ (remainder >> (WIDTH - 8));
remainder = crcTable[byte] ^ (remainder << 8); // 针对字节余数
// 执行表查找
}
return remainder;
}