当前位置: 首页 > news >正文

STM32软硬件CRC测速对比

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

    主要部分

    image-20231223163424233

    128K数据测试结果:

    image-20231223165128463

    image-20231223164425382

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

2M数据测试结构

image-20231223165224031

image-20231223170238833

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

总结:

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

相关文章:

STM32软硬件CRC测速对比

硬件CRC配置 以及软硬件CRC速度对比 使用CUBEMX配置默认使用的是CRC32&#xff0c;从库中可以看出这一点 HAL库提供了以下两个计算函数 HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 这个函数用于在已有的CRC校验结果的基础上累积…...

第九部分 图论

目录 例 相关概念 握手定理 例1 图的度数列 例 无向图的连通性 无向图的连通度 例2 例3 有向图D如图所示&#xff0c;求 A, A2, A3, A4&#xff0c;并回答诸问题&#xff1a; 中间有几章这里没有写&#xff0c;感兴趣可以自己去学&#xff0c;组合数学跟高中差不多&#xff0c…...

如何用java实现对java虚拟机的性能监控?

要使用Java实现对Java虚拟机&#xff08;JVM&#xff09;的性能监控&#xff0c;可以使用Java Management Extensions&#xff08;JMX&#xff09;来获取和监控JVM的各种指标。以下是一个简单的示例代码&#xff0c;演示如何使用JMX监控JVM的内存使用情况&#xff1a; import …...

电路设计(7)——窗口比较器的multism仿真

1.功能设计 构建一个窗口比较器的电路&#xff0c;在输入电压大于3.5v&#xff0c;小于0.8v时&#xff0c;蜂鸣器报警&#xff0c;输入电压在0.8v到3.5v之间时&#xff0c;不报警。 整体电路如下&#xff1a; 2.设计思路 在输入端&#xff0c;采取电阻分压的方式&#xff0c;输…...

前端已死?探讨人工智能与低代码对前端的影响

文章目录 每日一句正能量前言前端行业究竟是好是坏&#xff1f;数字化转型的当下前端工程师该何去何从&#xff1f; 想要入行前端先认清这三个事实 后记 每日一句正能量 人的结构就是相互支撑&#xff0c;众人的事业需要每个人的参与。 前言 随着人工智能和低代码的崛起&#…...

树莓派,opencv,Picamera2利用舵机云台追踪人脸(PID控制)

一、需要准备的硬件 Raspiberry Pi 4b两个SG90 180度舵机&#xff08;注意舵机的角度&#xff0c;最好是180度且带限位的&#xff0c;切勿选360度舵机&#xff09;二自由度舵机云台&#xff08;如下图&#xff09;Raspiberry CSI 摄像头 组装后的效果&#xff1a; 二、项目目…...

uniapp中推出当前微信小程序

uni.exitMiniProgram() 通过代码直接退出当前小程序 uni.exitMiniProgram({success: function() {console.log(退出小程序成功);},fail: function(err) {console.log(退出小程序失败, err);} })...

AndroidStudio无法新建aidl文件解决办法

我用的 AS 版本是 Android Studio Giraffe | 2022.3.1 Build #AI-223.8836.35.2231.10406996, built on June 29, 2023 右键新建 aidl 文件&#xff0c; 提示 (AIDL File)Requires setting the buildFeatures.aidl to true in the build file 解决办法 修改 app 的 build.…...

java爬虫(jsoup)如何设置HTTP代理ip爬数据

目录 前言 什么是HTTP代理IP 使用Jsoup设置HTTP代理IP的步骤 1. 导入Jsoup依赖 2. 创建HttpProxy类 3. 设置代理服务器 4. 使用Jsoup进行爬取 结论 前言 在Java中使用Jsoup进行网络爬虫操作时&#xff0c;有时需要使用HTTP代理IP来爬取数据。本文将介绍如何使用Jsoup设…...

ZooKeeper Client API 安装及使用指北

下载 wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.4-beta/zookeeper-3.5.4-beta.tar.gz解压 tar -zxf zookeeper-3.5.4-beta.tar.gz安装 cd zookeeper-3.5.4-beta/src/c/ ./configure make sudo make install到 make 这一步大概率会出现报错&#xff1a;…...

本机ping不通虚拟机

windows下finall shell连不上虚拟机了&#xff0c;之前是可以的&#xff0c;然后ping虚拟机&#xff0c;发现也ping不通&#xff0c;随后到处找问题。 在本地部分&#xff0c;控制面板 ——>网络和Internet——>网络连接 &#xff0c; 可以看到 VMnet1和Vmnet8虽然都是已…...

Linux cfdisk命令

Linux cfdisk命令用于磁盘分区。 cfdisk是用来磁盘分区的程序&#xff0c;它十分类似DOS的fdisk&#xff0c;具有互动式操作界面而非传统fdisk的问答式界面&#xff0c;您可以轻易地利用方向键来操控分区操作。 语法 cfdisk [-avz][-c <柱面数目>-h <磁头数目>-…...

实用学习网站和资料

github:https://github.com/GitHubDaily/GitHubDaily Linux操作手册&#xff1a; GitHub - abarrak/linux-sysops-handbook: Essentials of Linux system administration. 从零开始制作一个操作系统&#xff1a; GitHub - ruiers/os-tutorial-cn: 从零开始编写一个操作系统…...

【已解决】c++qt如何制作翻译供程序调用

本博文源于笔者正在编写的工具需要创建翻译文件&#xff0c;恰好将qt如何进行翻译&#xff0c;从零到结果进行读者查阅&#xff0c;并非常推荐读者进行收藏点赞&#xff0c;因为步步都很清晰&#xff0c;堪称胎教式c制作&#xff0c;而且内容还包括如何部署在windows下。堪称值…...

DPDK单步跟踪(3)-如何利用visual studio 2019和visual gdb来单步调试dpdk

准备工作 因为时间的关系&#xff0c;我想到哪说到哪&#xff0c;可能没那么高的完成度。 但其实有心的人&#xff0c;看到这个标题&#xff0c;就关了本文自己能做了。 why和how to build debug version DPDK,见前两篇。这里我们准备开始。 首先&#xff0c;你有一台linux机…...

Python爬虫---解析---BeautifulSoup

BeautifulSoup简称&#xff1a;bs4 作用&#xff1a;解析和提取数据 1. 安装&#xff1a;pip install bs4 或pip install bs4 -i https://pypi.douban.com/simple&#xff08;使用国内镜像下载&#xff09; 注意&#xff1a;需要安装在python解释器相同的位置,例如&#xf…...

Argument list too long when copying files

for i in /path/to/dir/*; do cp "$i" /path/to/other/dir/; done...

configure

configure 配置软件./configure --prefix$PWD/output CCaarch64-linux-gcc --hostaarch64-linux --enable-shared --enable-staticconfig.sub 文件 这个文件用于确定主机系统的类型&#xff0c;并返回与该系统相关的标识符。它包含一系列 shell 函数&#xff0c;用于检测主机…...

HOJ 项目部署-前端定制 默认勾选显示标签、 在线编辑器主题和字号大小修改、增加一言功能 题目AC后礼花绽放

# 项目拉取地址&#xff1a; https://gitee.com/himitzh0730/hoj.git # 切换到hoj-vue目录执行以下命令 #安装依赖 npm install #运行服务 npm run serve #修改代码后构建项目到dist文件夹&#xff0c;到服务器docker-compose.yml中修改hoj-frontend文件映射即可 npm run build…...

Scikit-Learn线性回归(二)

Scikit-Learn线性回归二:多项式回归 1、多项式回归2、多项式回归的原理3、Scikit-Learn多项式回归3.1、Scikit-Learn多项式回归API1、多项式回归 线性回归研究的是一个自变量与一个因变量之间的回归问题。在实际应用中,并不是所有的情景都符合线性关系,大多数情况都是非线性…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...