for循环延时时间计算

2024-01-12

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

之前做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。

与预期不符。

但是如果主频按照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。

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

二、参考

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

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

该处使用的url网络请求的数据。


总结

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

for循环延时时间计算 的相关文章

随机推荐

  • 解码嗅探到的数据包

    我知道每个数据包都有一些标头 看起来像是字符的随机组合 另一方面 内容本身可以是纯 ascii 格式 因此它可能是人类友好的 我嗅探到的一些数据包是可读的 当然是原始的 html 标头 但有些数据包看起来像这样 0000 00 15 af
  • 合并列数据框

    我有以下数据框 df1 startTimeIso endTimeIso id 2023 03 07T03 28 56 969000 2023 03 07T03 29 25 396000 5 2023 03 07T03 57 08 73400
  • 具有多处理功能的 Tensorflow2.x 自定义数据生成器

    我刚刚升级到tensorflow 2 3 我想制作自己的数据生成器用于训练 使用tensorflow 1 x 我这样做了 def get data generator test flag item list load item list t
  • ActiveRecord:保存多个对象时跳过验证

    我知道我可以跳过单个保存的验证 如下所示 User new name John save validate false 但是 当同时保存多个对象时 我该如何做到这一点呢 像这样 Category create name Apps name
  • 在android应用程序中使用MediaPlayer的正确方法

    抱歉我的英语 但我来自巴西 我使用谷歌翻译 好吧 我在这个应用程序中遇到了困难 我试图制作一个在线广播流媒体 在 2 2 版本中工作正常 但在 4 0 版本中不起作用 没有发生错误 只是不起作用 下面是我的代码 我很感激任何帮助 packa
  • React Native Redux - 对象不是构造函数(评估“new ctor(props context)”)

    这是一个非常简单的页面 正在尝试使用 Redux 请参阅下面的代码 但是我收到错误object is not a constructor evaluating new ctor props context import React Comp
  • 根据所选值更改文本

    我为每个 JavaScript 添加了一个带有文本的元素 有了这个代码 document ready function if welcome page length my element after tr td td td Welcome
  • SQLAlchemy Joinedload过滤列

    您好 我想使用 joinload 对我的查询进行过滤 但我似乎无法让它发挥作用 以下是我的示例查询 result session query Work options joinedload Work company users joined
  • 单个 @RestController 端点的自定义序列化

    有没有一种方法 最好是某种类型的注释 为单个端点注册自定义序列化器 RestController 延伸豆子并放置一个 JsonSerialize这将是一个选项 但这需要一个非常无用的新 bean 类 我尝试了以下方法 JsonSeriali
  • 如何从 google chrome 扩展程序获取 PDF 文件的 URL

    去年 我开发了一个可处理 PDF 文件的 Google 扩展 我使用以下函数来获取 PDF 文件的 URL function getPDFUrl String const e document body firstElementChild
  • R 中的 Vlookup 匹配函数

    我对 R 非常陌生 目前我正在将我对 R 的了解很少应用到我必须执行的工作分析工作中 我有两个数据框 数据框 A 由交易详细信息组成 而数据框 B 由各种货币的月收盘汇率组成 数据框A 交易详情 TRANSACTION ID COLLECT
  • 如何在 RecyclerView.Adapter 中使用共享首选项?

    如何在 RecyclerView Adapter 中使用共享首选项 我在 RecyclerView Adapter 中使用了共享首选项值 但是共享首选项中没有保存任何内容 我必须在 RecyclerView Adapter 或活动中使用共享
  • 您能否在 Ajax (XHR) 调用的服务器端处理过程中可靠地设置或删除 cookie?

    我自己对此做了一些测试 准确地说是在 DWR 框架 Ajax 请求处理程序的服务器端处理期间 看来您可以成功地操作 cookie 但这与我在 Ajax 最佳实践中阅读的很多内容相悖浏览器如何解释来自 XmlHttpRequest 的响应 注
  • 无边框 NSWindow 上的圆角

    我正在创建一个应用程序并且我不需要标题栏 http www usabilitypost com 2010 10 22 no title bar If the title remains the same all the time does
  • 在nodejs中使用断言模块?

    大家好 我正在阅读node官方文档 我看到了 Assert 模块 但不明白它的用法 到目前为止我的结论是就像某些语言的 try catch 示例官方文档不足以让我理解该模块 你们能帮助我吗 这些将用于单元测试 该模块用于为您的应用程序编写单
  • 为什么 PyQt5 项目每次都会收到警告“QStandardPaths: XDG_RUNTIME_DIR not set”

    我正在使用 python 3 6 2 和 Emacs 25 在 Ubuntu 中开发 PyQt5 项目 并且它以 root 权限运行 这工作正常 但我得到了 QStandardPaths XDG RUNTIME DIR not set de
  • 在 slurm 上使用 python 的多处理

    我正在尝试在 slurm 上运行一些并行代码 其中不同的进程不需要进行通信 我天真地使用了 python 的 slurm 包 然而 我似乎只在一个节点上使用CPU 例如 如果我有 4 个节点 每个节点有 5 个 cpu 那么我只会同时运行
  • 将类型对象(类,而不是实例)从 python 传递到 c++

    我想要一个boost python wrappedC 函数能够接收类型 而不是实例 boost python 包装的 C 类 我可以声明包装的函数采用object 但是如何提取类型呢 我尝试过类似的方法 但类型对象似乎不是extract a
  • 华为OD机试真题-求满足条件的最长子串的长度-2023年OD统一考试(C卷)

    题目描述 给定一个字符串 只包含字母和数字 按要求找出字符串中的最长 连续 子串的长度 字符串本身是其最长的子串 子串要求 1 只包含1个字母 a z A Z 其余必须是数字 2 字母可以在子串中的任意位置 如果找不到满足要求的子串 如全是
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对