for循环延时时间计算

文章目录

  • 前言
  • 一、计算方式
  • 二、for循环
    • 2.1 for循环里定义变量
    • 2.2 codeblock设置C99标准
  • 三、
  • 四、
  • 总结

前言

之前做led点亮的实验,好像是被delay函数影响了,因为delay参数设置的不对,led没有正常闪烁。现在就想搞明白一些。

一、计算方式

1.1 阶段一

百度了一些文档,好像并没有专门取说明这一块的。

然后看了一篇帖子,相对说的比较清晰一些。

他看了for循环的汇编指令,

for(; nCount != 0; nCount–);
0x08000206 E000 B 0x0800020A
0x08000208 1E40 SUBS r0,r0,#1
0x0800020A 2800 CMP r0,#0x00
0x0800020C D1FC BNE 0x08000208

有3个指令,SUBS、CMP、BNE。其中SUBS和CMP都是单指令,BNE是3个机器周期。所以一条for循环一个指令周期需要5个机器周期。机器周期为主频的倒数。

如果时钟频率是72M,(1M = 1 * 10^6),那么机器周期就是t = 1 / 72M。

1s = 1000ms(毫秒),

1ms = 1000us(微秒),

1us= 1000ns(纳秒)。

所以一个机器周期t = 1.39 * 10 ^ -8s = 13.8ns;

一个for循环5个机器周期,所以一个指令周期 t2 = 69ns;

所以如果按照代码里的参数count=0xFFFFF的话, 循环时间就是t = 69ns * 1048575 = 72351675ns = 0.072s。

与预期不符。
``
2024年1月25日00:05:10更新
在做RCC实验的时候,用protues观察,使用的时钟是72M,在延时中使用0xFFFFF延时,在protues中计算得出t=1370ms-588ms=782ms。跟计算的0.072s很接近啊!
在这里插入图片描述
下面是代码情况

void rcc_led_loop()
{led_on();Delay_rcc(0xfffff);led_off();Delay_rcc(0xfffff);
}

以上为更新内容

但是如果主频按照8M来算,使用count = 1600000来for循环,时间为0.9936s。

1.2、阶段2

    STM32系列芯片(Cortex-M3)有三级流水线,指令周期不定,ARM给出的Cortex-M3核单片机的平均执行速度是1.25MIPS/Mhz。

MIPS的全称是Million Instructions Per Second,每秒百万指令(西方或者国际上的计量体系中1M(兆)=100万=1000000);Mhz,是指单片机CPU的主频兆赫兹。
  MIPS/Mhz的意思是(单片机CPU的主频)每兆赫兹下(单片机的指令执行速度)每秒执行1M(兆)条指令。比如,ARM官方给出的STM32F103x系列单片机的平均执行速度是1.25MIPS/Mhz,如果设置单片机A的主频为72MHz,那么单片机A的执行速度=1.25*72=90MIPS,即每秒执行90M条指令,一条指令的执行时间为1/90us=0.011us=11ns。注意,官方说的1.25DMIPS/MHz,是通过测试一些算法来实现的,不是实际测试硬件的结果,只能作为大概的一个参考。
  CPU执行中断时需要时间的,如入栈,出栈,以及其他处理,都需要时间!一般情况下,STM32的中断性能不超过500Khz,也就是中断间隔达到2us一次时,不管你中断函数多精简,基本上CPU就不会干其他什么事情了,因为它都在进出中断了。
  单条指令执行时间:STM32F10X单片机在主频为72MHz下,C语言程序执行一条指令需要的时间可认为10ns~100ns。

目前觉得指令是汇编指令。

1.3 参考

STM32-基于汇编来分析延时-电子工程世界

https://www.cnblogs.com/hanzg/p/16706886.html

二、for循环

2.1 for循环里定义变量

C89不能在for循环定义变量,C99支持。如果用gcc编译程序会报错,gcc是C89标准的。

​​​​​​​​​​在这里插入图片描述

codeblock验证是这样的。

2.1 codeblock设置C99标准

设置compiler设置成C99可以正常编译
​​在这里插入图片描述

应该是选择了GNU GCC Compiler的C99标准

之前还在思考为什么codeblock可以根据代码是C还是C++来选择编译器。今天突然发现了原因

就是设置里面的Toolchain executables菜单下面设置的。

在这里插入图片描述

mingW 是一个开源的 符合 linux 下 c/c++习惯的windows平台的编译器,其集成了gcc。在最新的版本4.7.2 中,支持c++11。

下面这个帖子讲的是static-libgcc的相关知识,比较多,看的晕

Linux 动态库和静态库-CSDN博客

2.2 codeblock设置头文件路径

在这里插入图片描述

2.2 for循环汇编指令

用vs查看for循环汇编指令

开始调试——右击选择转到反汇编

在这里插入图片描述

其中跳转指令会用好几个机器周期。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

Fluent Bit配置与使用——基于版本V2.2.2

Fluent Bit日志采集终端 文档适用版本:V2.2 1、日志文件处理流程 数据源是一个普通文件,其中包含 JSON 内容,使用tail插件记录日志,通过parsers进行格式化匹配(图里没写),通过两个筛选器&…

新能源汽车智慧充电桩管理方案:环境监测与充电安全多维感知

随着新能源技术的不断发展,新能源充电桩作为电动汽车的重要基础设施,其管理和维护变得尤为重要。环境监测类传感器能够实时监测充电桩周围的环境参数,如温度、湿度等,为管理人员提供及时、准确的数据,以便做出相应的调…

JS之歌词滚动案例

让我为大家带来一个歌词滚动的案例吧&#xff01; 详细的介绍都在代码块中 我很希望大家可以自己动手尝试一下&#xff0c;如果需要晴天的mp3音频文件可以私信我 上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

Excel·VBA时间范围筛选及批量删除整行

看到一个帖子《excel吧-筛选开始时间&#xff0c;结束时间范围内的所有记录》&#xff0c;根据条件表中的开始时间和结束时间构成的时间范围&#xff0c;对数据表中的开始时间和结束时间范围内的数据进行筛选 目录 批量删除整行&#xff0c;整体删除批量删除整行&#xff0c;分…

HTML+CSS:炫酷登录切换

效果演示 实现了一个登录注册页面的切换效果&#xff0c;当用户点击登录或注册按钮时&#xff0c;会出现一个叠加层&#xff0c;其中包含一个表单&#xff0c;用户可以在表单中输入用户名和密码&#xff0c;然后点击提交按钮进行登录或注册。当用户点击返回按钮时&#xff0c;会…

【Android】Android中的系统镜像由什么组成?

文章目录 总览Boot Loader 的加锁与解锁Boot 镜像内核RAM diskARM 中的设备树 (Device Tree) /System 和/Data 分区镜像参考 总览 各种Android设备都只能刷专门为相应型号的设备定制的镜像。 厂商会提供一套系统镜像把它作为“出厂默认”的 Android 系统刷在设备上。 一个完…

SpringCloudAlibaba系列之Nacos实战

目录 注意事项 参考资源 Nacos配置中心 初始化项目 进行Nacos相关配置 运行 Nacos注册中心 dubbo方式 对外暴露接口dubbo-api 服务提供者dubbo-provider 服务消费者dubbo-consumer 负载均衡客户端方法 服务提供者 服务消费者 注意事项 不管是使用Nacos配置中心&…

代码随想录 Leetcode144/94/145 二叉树的前/中/后序遍历

题目&#xff1a; 前&#xff1a; 中&#xff1a; 后&#xff1a; 代码&#xff08;首刷自解 2024年1月24日&#xff09;&#xff1a; //前序遍历&#xff0c;递归 class Solution { public:void funcOfRecursion(TreeNode* cur, vector<int>& vec) {if (cur null…

谈谈 RocketMQ 5.0 分级存储背后一些有挑战的技术优化

作者&#xff1a;斜阳 RocketMQ 5.0 提出了分级存储的新方案&#xff0c;经过数个版本的深度打磨&#xff0c;RocketMQ 的分级存储日渐成熟&#xff0c;并成为降低存储成本的重要特性之一。事实上&#xff0c;几乎所有涉及到存储的产品都会尝试转冷降本&#xff0c;如何针对消…

自动化Web页面性能测试介绍

随着越来越多的用户使用移动设备访问 Web 应用&#xff0c;使得 Web 应用需要支持一些性能并不是很好的移动设备。为了度量和测试 Web 应用是不是在高复杂度的情况下&#xff0c;页面性能能满足用户的需求。 同时&#xff0c;随着 Web 应用的空前发展&#xff0c;前端业务逐渐…

插入排序

插入排序 概述步骤代码示例输出结果 概述 插入排序是一种最简单直观的排序算法&#xff0c;它的工作原理是通过创建有序序列和无序序列&#xff0c;然后再遍历无序序列得到里面每一个数字&#xff0c;把每一个数字插入到有序序列中正确的位置。 插入排序是一种简单直观的排序…

某马头条——day10

热文章数据查询 分布式任务调度xxl-job 概述 环境搭建 docker化部署 docker run -p 3306:3306 --name mysql57 \ -v /opt/mysql/conf:/etc/mysql \ -v /opt/mysql/logs:/var/log/mysql \ -v /opt/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDroot\ -d mysql:5.7 dock…

尝试给docker ubuntu22.04镜像添加远程访问桌面

实在时不愿折腾&#xff0c;但是ubuntu 镜像没有桌面&#xff0c;有些操作实在太难受了&#xff0c;效率也不高。硬着头皮上吧。幸亏这是个docker的镜像。要是个虚拟机&#xff0c;这折腾来去&#xff0c;直接崩溃了。docker的好处就是立马就能从头来过&#xff0c;秒级的删除安…

分辨率 时钟频率 lane速率计算

PCLK: pixel clock(像素频率) 计算方法如下&#xff1a; 以1920x1080p/60hz为例&#xff0c;total pixel&#xff1a;2200&#xff0c;total line&#xff1a;1125&#xff0c;filed rate&#xff1a;60Hz&#xff0c;那么&#xff1a;PCLK 2200*1125*60 148.5MHz&#xff1b…

ATF(TF-A)安全通告TF-V11——恶意的SDEI SMC可能导致越界内存读取(CVE-2023-49100)

目录 一、ATF(TF-A)安全通告TFV-11 (CVE-2023-49100) 二、透过事务看本质SDEI是干啥的呢&#xff1f; 三、CVE-2023-49100 1、GICv2 systems 2、GICv3 systems 四、漏洞修复 一、ATF(TF-A)安全通告TFV-11 (CVE-2023-49100) Title 恶意的SDEI SMC可能导致越界内存读取&am…

Spring Security架构

文章目录 过滤器回顾DelegatingFilterProxyFilterChainProxySecurityFilterChainSecurity Filters打印Security Filters将自定义过滤器添加到过滤器链 Handling Security ExceptionsSaving Requests Between AuthenticationRequestCachePrevent the Request From Being Saved R…

《游戏-01_3D-开发》之—人物动画控制器

创建变量&#xff0c; 创建线&#xff0c; 连接&#xff0c; 选中线会变为蓝色&#xff0c;新增变量&#xff0c; 设置线&#xff0c; 双击子层进入子层&#xff0c; 创建变量&#xff0c; 双击SkillPanel 拖拽好之后返回上一层&#xff0c; 依次连接&#xff0c; 设置线&#…

[Tomcat] [从安装到关闭] MAC部署方式

安装Tomcat 官网下载&#xff1a;Apache Tomcat - Apache Tomcat 9 Software Downloads 配置Tomcat 1、输入cd空格&#xff0c;打开Tomca目录&#xff0c;把bin文件夹直接拖拉到终端 2、授权bin目录下的所有操作&#xff1a;终端输入[sudo chmod 755 *.sh]&#xff0c;回车 …

【GitHub项目推荐--不错的 Go 学习项目】【转载】

开源实时性能分析平台 Pyroscope 是基于 Go 的开源实时性能分析平台&#xff0c;在源码中添加几行代码 pyroscope 就能帮你找出源代码中的性能问题和瓶颈、CPU 利用率过高的原因&#xff0c;调用树展示帮助你理解程序&#xff0c;支持 Go、Python、Ruby 语言。 Pyroscope 可以…

k8s的图形化工具---rancher

rancher是一个开源的企业级多集群的k8s管理平台。 rancher和k8s的区别&#xff1a;都是为了容器的调度和编排系统。但是rancher不仅可以调度还可以管理整个k8s集群。 rancher自带监控(普罗米修斯) 实验部署 master01 20.0.0.32 node01 20.0.0.34 node02 20.0.0.35 test …