华芯微特SWM34-IO速度优化

对比测试了一下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,有判断语句,非纯粹翻转速度,也是大多应用的情况),估计这也是极限了。
在这里插入图片描述
文章为原创,欢迎转载,请注明出处

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Rust每日一练(Leetday0012) 首末位置、插入位置、有效数独

目录 34. 查找元素的首末位置 Find-first-and-last-position-of-element-in-sorted-array &#x1f31f;&#x1f31f; 35. 搜索插入位置 Search Insert Position &#x1f31f; 36. 有效的数独 Valid Sudoku &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏…

Atcoder beginner contest 302

A - Attack AC代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> #define int long long using namespace std; signed main() {int a, b;cin >> a >> b;if (a % b 0) cout << a / b << endl;else c…

加密与解密 调试篇 动态调试技术 (二)

目录 常见的断点 1.INT 3 断点 检测 绕过 2.硬件断点 原理 我们给出硬件中断的例子 删除硬件断点 3.内存断点 原理 例子 删除 区别 总结 4.内存访问一次性断点 5.消息断点 例子 删除 6.条件断点 &#xff08;1&#xff09;按寄存器条件中断 &#xff08;2&…

【JDK】一、jdk17的下载与安装配置(图文说明超详细)

JDK17的下载与安装 前言一、JDK17下载1、官方下载地址 &#xff08; Oracle中国的官方网站&#xff09; 二、JDK17安装1、先看一下我现在的java版本和环境变量2、开始新的安装第一步&#xff1a;双击下载的jdk-17.0.7_windows-x64_bin.exe 进入到安装页面第二步&#xff1a;jdk…

sqlmap命令大全(附详细扫描流程)

一、sqlmap命令大全。 -u 指定目标URL (可以是http协议也可以是https协议)-d 连接数据库--dbs 列出所有的数据库--current-db 列出当前数据库--tables 列出当前的表--columns 列出当前的列-D 选择使用哪个数据库-T 选择使用哪个表-C 选择使用哪个列--dump 获取字段中的数据--…

破解mysql用户的密码

假如mysql数据库中有一个 prod_blb 用户&#xff0c;你作为root管理员&#xff0c;想知道它的密码&#xff0c;又不想修改它的密码。这个时候就只能通过获取到 prod_blb 用户加密的密码进程破译 1、MYSQL加密方式 MYSQL数据库的认证密码有两种方式&#xff0c;MYSQL 4.1版本之…

《Spring Guides系列学习》guide6 - guide10

要想全面快速学习Spring的内容&#xff0c;最好的方法肯定是先去Spring官网去查阅文档&#xff0c;在Spring官网中找到了适合新手了解的官网Guides&#xff0c;一共68篇&#xff0c;打算全部过一遍&#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

【源码解析】流控框架Sentinel源码深度解析

前言 前面写了一篇Sentinel的源码解析&#xff0c;主要侧重点在于Sentinel流程的运转原理。流控框架Sentinel源码解析&#xff0c;侧重点在整个流程。该篇文章将对里面的细节做深入剖析。 统计数据 StatisticSlot用来统计节点访问次数 SpiOrder(-7000) public class Statis…

跨时钟域数据同步

跨时钟信号直接传输在信号跳变时违背本地时钟域的时序要求&#xff08;建立时间约束&#xff0c;保持时间约束&#xff09;&#xff0c;容易产生亚稳态&#xff0c;无法确定亚稳态何时结束以及结束时保持在何种状态上。 用同步器抑制亚稳态的往下传播的概率&#xff0c;根据情…

H3C IPSec IKE野蛮模式

这里使用H3C模拟器。 H3C IPSec IKE野蛮模式&#xff0c;又称为IKE Main Mode&#xff0c;主要是在第一阶段&#xff08;Phase 1&#xff09;的过程中提供身份保护。它主要用于VPN隧道建立过程中的密钥交换。以下是配置步骤&#xff1a; 创建IKE提案&#xff1a; system-view…

QT圆形进度条(QT桌面项目光照强度检测)

文章目录 前言一、编程思路二、核心代码实现总结 前言 本篇文章我们讲解QT实现圆形进度条&#xff0c;并实现动态的效果。 一、编程思路 实现QT圆形进度条其实是非常简单的&#xff0c;思路就是画两个圆弧。 这里大家就会觉得很奇怪了为什么画两个圆弧就能实现圆形进度条了呢…

轻NAS搭建 - 使用微力同步搭建私人云盘,无需公网IP也能远程访问

文章目录 1.前言2. 微力同步网站搭建2.1 微力同步下载和安装2.2 微力同步网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 私有云盘作为云存储概念的延伸&#xff0c;虽然谈不上多么新颖&#xff0c;但是其…

华为OD机试之不含101的整数(Java源码)

不含101的数 题目描述 小明在学习二进制时&#xff0c;发现了一类不含 101的数&#xff0c;也就是&#xff1a; 将数字用二进制表示&#xff0c;不能出现 101 。 现在给定一个整数区间 [l,r] &#xff0c;请问这个区间包含了多少个二进制不含 101 的整数&#xff1f; 输入描述…

2023全球最佳医院榜单及简要介绍

作为医学类的访问学者、博士后及联合培养博士们&#xff0c;都希望到世界知名医院进行临床研修交流及科研学习。2023 年世界最佳医院排行榜的发布为申请者提供了目标平台&#xff0c;现知识人网小编整理刊出。 近期&#xff0c;《新闻周刊》和全球数据公司 Statista 推出了2023…

Vue之MVVM模型

文章目录 前言一、简说MVVM模型二、走进MVVM总结 前言 Vue的创建者在创建Vue时没有完全遵守MVVM&#xff08;一种软件架构模式&#xff09;&#xff0c;但是Vue的设计受到了他它的启发。这也是为什么经常用vm&#xff08;ViewModel的缩写&#xff09;这个变量名表示Vue实例。 …

操作系统第三章——内存管理(中)

九月重楼二两&#xff0c;冬至蝉蜕一钱&#xff0c;煎入隔年雪煮沸&#xff0c;可治人间相思苦疾&#xff0c; 可是&#xff0c;重楼七叶一花&#xff0c;冬日何来蝉蜕&#xff0c;原是相思无解 殊不知 夏枯即为九叶重楼&#xff0c;掘地三尺寒蝉现&#xff0c;除夕子时雪&…

non-protected broadcast场景分析及解决

non-protected broadcast场景分析及解决 在两个app之间互相送消息使用BroadcastReceiver&#xff0c;有时在运行过程中在logcat工具中会发现大片的飘红消息。 要消除这些错误信息&#xff0c;需要在广播的 Sender 和 Receiver 做部分的修改。 错误信息分析 由于 发送端 的 M…

`JOB`的正确打开方式

文章目录 JOB的正确打开方式 简介工作原理使用场景使用方式注意事项启动JOB失败的情况JOB正确打开方式错误方式正确方式进阶方式终极方式 总结 JOB的正确打开方式 最近有一些小伙伴在使用JOB时&#xff0c;由于使用不当&#xff0c;引起一些问题。例如把license占满&#xff0c…

操作系统第四章——文件管理(下)

竹本无心&#xff0c;却节外生枝&#xff0c;藕却有孔&#xff0c;但出淤泥而不染&#xff0c;人生如梦&#xff0c;却却不随人愿&#xff0c;万般皆是命&#xff0c;半点不由人 文章目录 4.1.5 逻辑结构VS物理结构4.1.6 文件的基本操作知识总览创建文件删除文件打开文件关闭文…

【弹性分布式EMA】在智能电网中DoS攻击和虚假数据注入攻击(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…