华芯微特SWM34-IO速度优化

news2024/11/16 13:45:43

对比测试了一下IO翻转速度在各种函数调用的情况下的差异
CPU运行速度150Mhz,SDRAM开

  1. 直接调用翻转函数
while(1)
{
	GPIO_InvBit(GPIOA, PIN0)}

在这里插入图片描述
速度大约5Mhz,主要是因为函数调用开销和函数内部的移位和异或操作,增加了指令的运行数量。

void GPIO_InvBit(GPIO_TypeDef * GPIOx, uint32_t n)
{
	GPIOx->ODR ^= (0x01 << n);
}

2 去掉调用开销,优化操作

while(1)
{
	GPIOA->ODR |= (0x01 << PIN0); //set
	GPIOA->ODR &= ~(0x01 << PIN0); //clear
}

在这里插入图片描述
速度能提高到9M左右。
我们发现这个调用,因为有一个或和与的操作,来完成read-modify-write的动作。要完成这个操作,需要先读一下IO的状态,然后修改完成再写会,通用多做了不少工作。
那么有没有类似st等其他芯片一样直接写bit的操作呢?答案是有,查询了一下手册,居然有一个不太注意的地方是可以的,操作虽然和st等其他类似芯片的有差异,但是结果是一致的。
3. 直接bit操作

while(1)
{
	GPIOA->DATAPIN0 = 1; //set
	GPIOA->DATAPIN0 = 0; //clear
}
//这个来自于对下面这个函数的优化
void GPIO_AtomicSetBit(GPIO_TypeDef * GPIOx, uint32_t n)
{	
	*(&GPIOx->DATAPIN0 + n) = 1;
}
void GPIO_AtomicClrBit(GPIO_TypeDef * GPIOx, uint32_t n)
{
	*(&GPIOx->DATAPIN0 + n) = 0;
}

在这里插入图片描述
查阅datasheet发现有相关的描述,可以做位操作,虽然和用习惯了的st系列比起来有点不一样,但是结果一样。
测试优化后的数据,io最高速度已经能到接近30Mhz(我这个是连续输出8bit,有判断语句,非纯粹翻转速度,也是大多应用的情况),估计这也是极限了。
在这里插入图片描述
文章为原创,欢迎转载,请注明出处

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

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

相关文章

这是JWT 简单使用

JWT 是 Json Web Token的缩写 JSON Web Tokens - jwt.ioJSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is digitally signed using JSON Web Sig…

6-索引

目录 1.什么是索引&#xff1f; PS&#xff1a;数据库引擎简介&#xff08;InnoDB VS MyISAM&#xff09; 2.为什么需要索引&#xff1f; PS&#xff1a;存储数据模组 PS&#xff1a;查询数据存储的目录&#xff1a; 3.索引的作用 PS&#xff1a;索引 VS 书的目录 4.索…

PostgreSQL 源码部署

文章目录 说明1. 准备工作1.1 源码包下载1.2 解压安装目录1.3 安装依赖包1.4 添加用户1.5 创建数据目录 2. 编译安装2.1 源码编译2.2 配置环境变量2.3 初始化数据库2.4 启动数据库2.5 连接数据库 3. 参数调整3.1 配置 pg_hba3.2 监听相关2.4 日志文件2.5 内存参数 说明 本篇文…

db2常用命令/db2常见报错

文章目录 一、前言二、db2服务端常用命令2.1 启动/停止数据库2.2 连接数据库2.3 查看schema下所有表名2.4 查看表结构2.5 删除表数据2.6 导入导出del/ixf文件2.6.1 del与ixf区别 三、db2客户端常用命令3.1 查看schema下所有表及每个表的记录数3.2 修改表字段&#xff0c;对表字…

WPF中集合ObservableCollection<T>的使用

C#集合类ObservableCollection<T> 类似于泛型列表类List<T>&#xff0c;表示一个动态数据收集&#xff0c;该集合在添加或删除项或刷新整个列表时提供通知。 所在命名空间&#xff1a;System.Collections.ObjectModel 继承关系&#xff1a; public class Obser…

APP软件开发详细流程如何?

在互联网技术发达的今天&#xff0c;APP已经深入到我们生活的方方面面了&#xff0c;从购物、家政、洗车、教育到美容、旅游、餐饮等等&#xff0c;都可以通过各种各样的APP软件来实现&#xff0c;使我们的生活更加便捷化、智能化。不过&#xff0c;很多感兴趣的朋友对于APP软件…

亚马逊云科技宣布全面推出Amazon Aurora I/O-Optimized集群配置

自亚马逊云科技Amazon Aurora于2014年推出以来&#xff0c;成千上万的客户选择Aurora来运行其要求最严苛的应用程序。Aurora在全球范围内提供无与伦比的高性能和可用性&#xff0c;完全兼容MySQL和PostgreSQL&#xff0c;成本仅为商用数据库的十分之一。 许多亚马逊云科技客户受…

电竞小程序系统开发功能有哪些?

电竞小程序系统开发功能有哪些&#xff1f; 1、电竞资讯。对于电竞爱好者来说&#xff0c;每一场电竞比赛的相关信息都是不容错过的&#xff0c;因此用户可以通过小程序直接了解近期电竞相关资讯&#xff0c;例如&#xff1a;赛程安排、直播平台、参赛团队、比赛规则等&…

【CocosCreator问题总结】MotionStreak效果显示异常

&#x1f4e2;博客主页&#xff1a;肩匣与橘&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由肩匣与橘编写&#xff0c;首发于CSDN&#x1f649;&#x1f4e2;生活依旧是美好而又温柔的&#xff0c;你也是✨ …

公司新招了一个00后软件测试工程师,上来一顿操作给我看呆了...

前段时间公司新来了个同事&#xff0c;听说大学是学的广告专业&#xff0c;因为喜欢IT行业就找了个培训班&#xff0c;后来在一家小公司干了三年&#xff0c;现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍&#xff0c;服务器缩减一半&#xff0c;性能反而提升4倍!给…

基于微信小程序的医院挂号预约系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

react学习2

props基本用法&#xff0c;把属性自动保存到props里 简写&#xff1a;三点展开&#xff0c;展开运算符无法展开对象&#xff0c;但是三点外侧包裹花括号可以复制对象{...P} 对props的属性进行限制 首先需要引入prop-types.js包 之后再去进行限制 props是只读的&#xff0c;只…

Vue之数据代理(getter、setter)

文章目录 前言一、数据代理1.Object.defineProperty()2.数据代理讲解 总结 前言 Object.defineProperty 数据代理 一、数据代理 1.Object.defineProperty() &#xff08;1&#xff09;实例对象可以通过Object.defineProperty()方法来添加属性&#xff0c;但是添加的属性默认…

进击的Mini LED:群雄逐“屏”,谁主沉浮

前不久&#xff0c;素有家电产业“风向标”之称的中国家电及消费电子博览会AWE在上海圆满闭幕。作为全球三大顶级家电与消费电子展会之一&#xff0c;每年各家企业都会携各自尖端技术亮剑上海滩&#xff0c;舞台中央的面孔也会逐年有些许不同&#xff0c;而从C位的演变中&#…

基于Spring Boot的秒杀系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;…

陌生交友发布动态圈子单聊打招呼群聊app开发

陌生交友发布动态圈子单聊打招呼群聊app开发 功能有&#xff0c;发布圈子&#xff0c;发布动态&#xff0c;查看附近的人&#xff0c;发布活动&#xff0c;实人认证&#xff0c;个人主页&#xff0c;相册查看,单聊&#xff0c;群聊。 即时通讯第三方goeasy接口。 好的&#x…

017+图解C语言中函数栈帧的创建与销毁(VS2022环境)

0.前言 您好&#xff0c;这里是limou3434的一篇个人博文&#xff0c;感兴趣的话您也可以看看我的其他文章。本次我将和您一起学习在C语言中函数栈帧的概念。 1.学习函数栈帧的意义 局部变量是怎么穿创建的&#xff1f;为什么局部变量的值是随机的函数是怎么传参的&#xff1…

满分Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC

最近小编整理了一下一线架构师的Spring全家桶笔记&#xff1a;SpringSpring BootSpring CloudSpring MVC&#xff0c;分享给大家一起学习一下~ 01 Spring Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的…

nacos+frp穿透实现局域网调用

简介&#xff1a;首先你要有外网服务器。在外网服务器上安装frp服务端。然后在你想要调用的局域网电脑上安装frp客户端 frp下载链接 Releases fatedier/frp GitHub 外网服务器上我用的是docker安装的。你也可以直接下载并启动。这里我就不描述了。 首先我们先创建某个目录…

ESP32 ADC测量电压 arduino

ADC ADCESP32的ADC通道衰减倍数代码实现精度问题 ADC ADC&#xff08;模拟-数字转换器&#xff09;&#xff0c;首先了解模拟信号和数字信号之间的差异。模拟信号是连续的&#xff0c;可以在其范围内取无限个离散值&#xff0c;例如声音、光线等。 数字信号则是离散的&#xf…