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提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

Oracle、MySQL数据库常规命令语法-简易记录(非常规持续更新)

前言:呈现的是非常基础必备命令以及常规关联语法,因涉及到不同数据库其表达都会有所区别,此篇纯属做个仓库记录更非常规持续更新,专业人士可忽略,且看且珍惜… MySQL: 关系型数据库、重点开源、支持大型规模、标准SQL数据语言、多平台多架构、高可用集群、可定制开发等等、…

从方法论到最佳实践,深度解析企业云原生 DevSecOps 体系构建

作者:匡大虎 引言 安全一直是企业上云关注的核心问题。随着云原生对云计算基础设施和企业应用架构的重定义,传统的企业安全防护架构已经不能够满足新时期下的安全防护要求。为此企业安全人员需要针对云原生时代的安全挑战重新进行系统性的威胁分析并构…

编程笔记 html5cssjs 056 CSS不透明度

编程笔记 html5&css&js 056 CSS不透明度 一、CSS 不透明度 / 透明度二、使用 RGBA 的透明度三、透明盒中的文本小结 不透明度/透明度。利用透明度可以提高页面的层次效果。 一、CSS 不透明度 / 透明度 opacity 属性指定元素的不透明度/透明度。 opacity 属性通常与 :h…

Stimulsoft v2024,支持DevExpress报告导入、新数据源Snowflake

Stimulsoft 报告、仪表板和表格发布新版 2024.1!此版本引入了用于在 Angular 应用程序中创建仪表板的新工具、简化的功能区面板、用于链接 Snowflake 存储中的数据的新适配器以及大量其他增强功能。一起来看下具体都有哪些? Stimulsoft Ultimate &#…

android:persistent和android:priority的区别,对进程优先级有什么影响?

前言:写的apk因为系统busy给我kill了,(adj 900): kill all background,在AndroidManifest.xml添加android:persistent"true"后,被甲方要求不能这样做,还是得从adj改,把 priority改成1000 android…

[笔记]深度学习入门 基于Python的理论与实现(六)

6. 与学习相关的技巧 6.1 参数的更新 神经网络学习的目的是找到使损失函数尽可能小的参数, 这个过程叫最优化_(optimization_), 但是由于神经网络的参数空间复杂, 所以很难求最优解. 前几章, 我们使用参数的梯度, 沿梯度的反向更新参数, 重复多次, 从而逐渐靠近最优参数, 这个…

数学建模绘图

注意:本文章旨在记录观看B站UP数模加油站之后的笔记文章,无任何商业用途~~ 必备网站 以下网站我都试过,可以正常访问 配色(取色)网站: Color Palettes Generator and Color Gradient Tool Python&#x…

嵌入式linux学习之系统烧录

1.所需文件 1. 开发板为正点原子stm32mp157,文件可按照linux驱动教程编译,也可在正点原子文档->08、系统镜像\02、出厂系统镜像中找到: 2.烧录 1.拨码开关为000(usb启动),otg接口接入虚拟机,打开stm32cubeProgrammer: 2.页面…

8.6跳跃游戏②(LC45-M)

算法: 与上一题一样,还是看最大覆盖范围 要从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最少步数! 这里…

力扣1027. 最长等差数列

动态规划 思路: 可以参考力扣1218. 最长定差子序列目前不清楚公差,可以将序列最大最小值找到,公差的范围是 [-(max - min), (max - min)],按公差递增迭代遍历求出最长等差数列; class Solution { public:int longest…

数灵通丨可以实现抖音引流微信小程序了

抖音作为一款火爆的短视频社交平台,吸引了数亿用户的关注和喜爱。除了观看和制作视频外,抖音还提供了跳转到小程序的功能,让用户可以享受更多功能和乐趣。那么,如何在抖音中跳转到小程序呢?以下是详细解答:…

web安全学习笔记【08】——算法1

思维导图在最后 #知识点: 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&…

一站式VR全景婚礼的优势表现在哪里?

你是否想过,婚礼也可以用一种全新的方式呈现,VR全景婚礼让每位用户沉浸式体验婚礼现场感。现在很多年轻人,都想让自己的婚礼与众不同,而VR全景婚礼也是未来发展的方向之一。 很多婚庆公司开通了VR婚礼这一服务,就是通过…

Kubernetes-Taint (污点)和 Toleration(容忍)

目录 一、Taint(污点) 1.污点的组成 2.污点的设置、查看和去除 3.污点实验: 二、Toleration(容忍) 1.容忍设置的方案 2.容忍实验: Taint 和 toleration 相互配合,可以用来避免 pod 被分配…

Pyecharts绘图

文章目录 柱状图折线图饼图组合图 柱状图 #柱状图 from pyecharts.charts import Bar from pyecharts import options as opts #去掉警告信息 import pyecharts pyecharts.globals._WarningControl.ShowWarning False # 数据 cate t1[行政区].tolist() data1 t1[单价].tolist…

蓝牙 | 软件: Qualcomm BT Audio 问题分析(1)----ACAT Tools安装

大家好! 我是“声波电波还看今朝”成员的一位FAE Devin.wen,欢迎大家关注我们的账号。 今天给大家大概讲解“如何排查Qualcomm BT Audio”的疑难杂症(一)如何安装ACAT Tools。 大家在遇到Audio方面的问题,比如 无声、…

leetcode:三数之和---双指针

问题: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…

核桃的数量---蓝桥杯

思路&#xff1a; 题目所代表的意思就是a,b,c这三个必须是核桃数量的因子&#xff0c;即a,b,c三个的最小公倍数 #include <iostream> #include <algorithm> using namespace std; // int main() { int a,b,c;cin>>a>>b>>c;int da*b/__gcd(a,b…

Zookeeper架构系列——集群模式

背景 架构图 集群模式详解 客户端连接到单个ZooKeeper服务器。客户端维护一个TCP连接&#xff0c;通过该连接发送请求、获取响应、获取监视事件和发送检测信号。如果与服务器的TCP连接中断&#xff0c;客户端将连接到其他服务器。 订购了ZooKeeper。ZooKeeper在每次更新时都…

gin中使用限流中间件

限流又称为流量控制&#xff08;流控&#xff09;&#xff0c;通常是指限制到达系统的并发请求数&#xff0c;本文列举了常见的限流策略&#xff0c;并以gin框架为例演示了如何为项目添加限流组件。 限流 限流又称为流量控制&#xff08;流控&#xff09;&#xff0c;通常是指…