STM32软硬件CRC测速对比

news2025/1/20 17:09:52

硬件CRC配置 以及软硬件CRC速度对比

image-20231223161925821

使用CUBEMX配置默认使用的是CRC32,从库中可以看出这一点

image-20231223162013619

image-20231223162053295

HAL库提供了以下两个计算函数

image-20231223162239058

  • 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);
        // 硬件 CRC32
        size_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);
        // 软件 CRC32
        size_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;  // 返回成功码
    }
    

    主要部分

    image-20231223163424233

    128K数据测试结果:

    image-20231223165128463

    image-20231223164425382

    • 硬件测速在6ms左右
    • 软件测速在25ms左右

2M数据测试结构

image-20231223165224031

image-20231223170238833

  • 硬件在100ms左右
  • 软件在410ms左右

总结:

  • 对比结果硬件CRC32比软件CRC32快4倍左右

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1330783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

非阻塞 IO(NIO)

文章目录 非阻塞 IO(NIO)模型驱动程序应用程序模块使用 非阻塞 IO(NIO) 上一节中 https://blog.csdn.net/tyustli/article/details/135140523&#xff0c;使用等待队列头实现了阻塞 IO 程序使用时&#xff0c;阻塞 IO 和非阻塞 IO 的区别在于文件打开的时候是否使用了 O_NONB…

直播电商“去网红化”势在必行,AI数字人打造品牌专属IP

近年来&#xff0c;网红直播带货“翻车”事件频发&#xff0c;给品牌商带来了信任危机和负面口碑的困扰&#xff0c;严重损害了企业的声誉。这证明强大的个人IP,对于吸引粉丝和流量确实能起到巨大的好处,堪称“金牌销售”,但太过强势的个人IP属性也会给企业带来一定风险&#x…

搜索二叉树(超详解)

文章目录 前言查找搜索二叉树的结构insertfinderase递归版本Findinserterase 二叉树的拷贝问题搜索二叉树的应用Key模型Key/Value的模型 前言 普通二叉树其实意义不大&#xff0c; 如果用二叉树存储数据的话&#xff0c;还不如顺序表&#xff0c;链表这些。 搜索二叉树它的意义…

Python 全栈体系【四阶】(九)

第四章 机器学习 十二、逻辑回归 1. 概述 1.1 什么是逻辑回归 逻辑回归&#xff08;Logistic Regression&#xff09; 虽然被称为回归&#xff0c;但其实际上是分类模型&#xff0c;常用于二分类。逻辑回归因其简单、可并行化、可解释强而受到广泛应用。二分类&#xff08;…

通过使用Gromacs和MM-PBSA计算结合能

关键词&#xff1a;Gromacs、MM-PBSA、结合能、受体、配体 当前&#xff0c;Gromacs已经被广泛应用在生物&#xff0c;材料等领域的模拟计算&#xff0c;其便捷、灵活等特点受到广泛研究人员的青睐。在模拟领域&#xff0c;至关重要的一类问题是计算体系内的自由能。例如两个蛋…

【智慧办公】如何让智能会议室的电子标签实现远程、批量更新信息?东胜物联网硬件网关让解决方案更具竞争力

近年来&#xff0c;为了减少办公耗能、节能环保、降本增效&#xff0c;越来越多的企业开始从传统的办公模式转向智慧办公。 以智能会议室为例&#xff0c;会议是企业业务中不可或缺的一部分&#xff0c;但在传统办公模式下&#xff0c;一来会议前行政人员需要提前准备会议材料…

S7-1200/1500(T) 通过功能块FB38051实现 SINAMICS S200 的 EPOS 基本定位控制

SINAMICS S200 PN 是西门子推出的新一代伺服驱动系统。SINAMICS S200 将与 SIMOTICS S-1FL2伺服电机、Motion Connect 350/380 电缆相结合&#xff0c;作为新型单轴 AC/AC 伺服系统&#xff0c;增强了西门子伺服驱动产品的竞争力并扩大了西门子在标准伺服市场的产品组合覆盖范围…

HTML---浮动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.常见的网页布局 二.标准文档流 标准文档流常见标签 标准文档流的组成 块级元素<div…

Plantuml之对象图语法介绍(十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

什么是多域名证书?

多域名证书是一种SSL/TLS证书&#xff0c;允许在同一证书中添加多个域名。这些域名可以是不同的主机名或完全不同的域。传统的SSL证书通常只能用于一个域名&#xff0c;而多域名证书的引入使得一个证书可以涵盖多个域&#xff0c;为多站点的管理提供了便利。 多域名证书的优势 …

开启虚拟与现实的融合时代

数字人直播&#xff0c;作为一项新兴技术&#xff0c;正逐渐改变着我们的生活方式和沟通方式。它通过利用最先进的人工智能技术&#xff0c;使得虚拟形象得以与现实世界实时互动&#xff0c;为用户带来了全新的体验。本文将探讨数字人直播的意义、应用场景以及可能带来的影响。…

如何通过UMC配置外围组件

随着云计算技术的不断发展&#xff0c;在信息化建设模式上云是大势所趋。对于企业而言&#xff0c;已建立的内部集成并不能支撑其快速搭建开发环境、快速部署集群服务&#xff0c;并且动态水平扩展对多组织情况许可费用高昂、没有敏捷快速迭代机制&#xff0c;导致开发完毕就落…

MySQL部署之yum安装

MySQL https://www.mysql.com //mysql官网 yum安装步骤 yum安装 清理环境 [rootmysql ~]# yum erase mariadb mariadb-server mariadb-libs mariadb-devel -yuserdel -r mysql[rootmysql ~]# rm -rf /etc/my* && rm -rf /var/lib/mysql && rm -rf /use/bin/m…

【LeetCode刷题笔记】前缀树

208. 实现 Trie (前缀树) 解题思路: 1. 前缀树 Map实现 ,使用一个 Map<Character, Trie> 来存储 每个字符 对应的 若干子节点 ,在构造函数中初始化 根节点 root 为 当前对象实例 , 在 插入

一文掌握分布式锁:Mysql/Redis/Zookeeper实现

目录 一、项目准备spring项目数据库 二、传统锁演示超卖现象使用JVM锁解决超卖解决方案JVM失效场景 使用一个SQL解决超卖使用mysql悲观锁解决超卖使用mysql乐观锁解决超卖四种锁比较Redis乐观锁集成Redis超卖现象redis乐观锁解决超卖 三、分布式锁概述四、Redis分布式锁实现方案…

羊大师解答,小孩是喝羊奶好还是牛奶好

小孩是喝羊奶还是牛奶好&#xff0c;这是一个经常让父母头疼的问题。羊奶和牛奶都是优质的乳制品&#xff0c;含有丰富的蛋白质、钙和维生素等营养成分&#xff0c;对小孩的生长发育都有重要作用。然而&#xff0c;从营养角度来看&#xff0c;两者还是有一些差异的。 羊奶和牛…

Netty 与 RPC(一)

Netty 与 RPC Netty 原理 Netty 是一个高性能、异步事件驱动的 NIO 框架&#xff0c;基于 JAVA NIO 提供的 API 实现。它提供了对TCP、UDP 和文件传输的支持&#xff0c;作为一个异步 NIO 框架&#xff0c;Netty 的所有 IO 操作都是异步非阻塞的&#xff0c;通过 Future-List…

Python程序设计 前言:Python最全面的知识体系都在这里了

文章目录 Python最全面的知识体系学会Python后,可以选择什么岗位的工作?Python最全面的知识体系 Python 是一种广泛使用的高级编程语言,以其清晰的语法和强大的功能而闻名。Python 知识体系可以大致分为以下几个部分: 基础语法: 变量和数据类型:了解 Python 中的基本数据…

信息安全等级保护的定义与意义

目录 前言 信息安全等级保护定义 广义上 狭义上 技术和管理 信息安全的基本要素 信息安全等级保护的意义 当前形式 形式严峻 国家安全 三个基本一个根本 预期目标 最终效果 实际意义 前言 信息安全等级保护是对信息和信息载体按照重要性等级分级进行保护的一种…

百度百科如何创建品牌词条?

你知道一个初创品牌想要打响知名度有多难吗&#xff1f;花费金钱去投广&#xff0c;结果往往石沉大海&#xff0c;人们越来越有品牌意识&#xff0c;买手机、买电脑、买化妆品先要看牌子&#xff0c;买品牌的会更有面子。所以品牌没有名气&#xff0c;真的举步维艰。 百度百科…