ZHCU875Z August 2001 – October 2023 SM320F28335-EP
#include <stdio.h>
#include "crc_tbl.h"
/****************************************************************************/
/* gen_crc() - 使用指定的 CRC 算法 ID 来计算数据的 CRC 值。 */
/* 在 ref_crc.c 中找到 */
/****************************************************************************/
unsigned long gen_crc(int id, const unsigned char *data, size_t len);
/****************************************************************************/
/* my_check_CRC() - 验证存储在给定 CRC 表中的所有记录的 CRC 值。 */
/* 也打印诊断信息。 */
/****************************************************************************/
unsigned int my_check_CRC(CRC_TABLE *tp)
{
int i;
unsigned int ret_val = 1;
uint32_t my_crc;
printf("\n\tTABLE INFO: rec size=%d, num_rec=%d.",
tp->rec_size, tp->num_recs);
for (i = 0; i < tp->num_recs; i++)
{
CRC_RECORD crc_rec = tp->recs[i];
/**************************************************/
/* 从 crc_rec.addr 开始为 crc_rec.size 单位计算数据的 CRC。 */
/* 使用 */
/* crc_rec.crc_alg_ID 选择算法。 */
/* 将计算值与 crc_rec.crc_value 进行比较。 */
/**************************************************/
my_crc = gen_crc(crc_rec.crc_alg_ID, (unsigned char *)crc_rec.addr,
crc_rec.size);
printf("\n\tCRC record: page=%x, alg=%x, addr = %lx, size=%lx, "
"\n\t\tcrc=%lx, my_crc=%lx.",
crc_rec.page_id, crc_rec.crc_alg_ID,
crc_rec.addr, crc_rec.size, crc_rec.crc_value, my_crc);
if (my_crc == crc_rec.crc_value)
printf("\n\tCRCs match for record %d.\n", i);
else
{
ret_val = 0;
printf("\n\tCRCs DO NOT match for record %d.\n", i);
}
}
return ret_val;
}