购物网站制作免费,天元建设集团有限公司开票信息,漳州做网站含博大选,国内最新经济新闻硬件CRC配置 以及软硬件CRC速度对比 使用CUBEMX配置默认使用的是CRC32#xff0c;从库中可以看出这一点 HAL库提供了以下两个计算函数 HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 这个函数用于在已有的CRC校验结果的基础上累积…硬件CRC配置 以及软硬件CRC速度对比 使用CUBEMX配置默认使用的是CRC32从库中可以看出这一点 HAL库提供了以下两个计算函数 HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 这个函数用于在已有的CRC校验结果的基础上累积accumulate新的数据块。如果你需要分多次处理数据比如将数据分成几个块然后分别进行CRC计算最后将这些计算结果合并就可以使用这个函数。 HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 这个函数用于对给定的数据块进行一次完整的CRC计算。如果你有整个数据块并且想要一次性计算CRC那么可以使用这个函数。
CRC16配置参考: LINK
软件CRC32
#define CRC32_POLYNOMIAL 0xEDB88320u
//传入参数 数据首地址 数据大小
static uint32_t calculate_crc32(const void *data, size_t size) {const uint8_t *byteData (const uint8_t *)data;uint32_t crc 0xFFFFFFFFu;for (size_t i 0; i size; i) {crc ^ byteData[i];for (int j 0; j 8; j) {crc (crc 1) ^ ((crc 1) ? CRC32_POLYNOMIAL : 0);}}return ~crc;
}软硬件测速对比
平台使用STM32H7内存使用外扩的SDRAM
对比方法 使用同一块内存区域校验软硬件CRC32,校验前后IO电平翻转,示波器捕获该方法比较精确 static int crc32(int argc, char **argv) {if (argc ! 3) {fprintf(stderr, Usage: crc32 start_address size_in_bytes\r\n);return 1; // 返回错误码}// 从命令行参数中获取起始地址和大小uint32_t dataStartAddress;size_t dataSizeInBytes;if (sscanf(argv[1], %x, dataStartAddress) ! 1) {fprintf(stderr, Invalid start address\r\n);return 1;}if (sscanf(argv[2], %zu, dataSizeInBytes) ! 1) {fprintf(stderr, Invalid size\r\n);return 1;}HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);// 硬件 CRC32size_t hard_crc32Result HAL_CRC_Calculate(hcrc,( void *)dataStartAddress,dataSizeInBytes);hard_crc32Result ^ 0xffffffffU;HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);HAL_Delay(10);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);// 软件 CRC32size_t soft_crc32Result calculate_crc32((const void *)dataStartAddress, dataSizeInBytes);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);// 输出计算得到的 CRC32 值printf(hard_crc32Result: 0x%x\r\n, hard_crc32Result);printf(soft_crc32Result: 0x%x\r\n, soft_crc32Result);return 0; // 返回成功码
}主要部分 128K数据测试结果 硬件测速在6ms左右软件测速在25ms左右
2M数据测试结构 硬件在100ms左右软件在410ms左右
总结
对比结果硬件CRC32比软件CRC32快4倍左右