处理器指令周期执行时间

2023-11-23

  • 我的猜测是__no_operation()内在(ARM)指令应花费 1/(168 MHz)来执行,前提是每个NOP在一个时钟周期内执行,我想通过文档验证这一点。

  • 有关处理器指令周期执行时间的信息是否有标准位置?我试图确定 STM32f407IGh6 处理器执行以 168 MHz 运行的 NOP 指令需要多长时间。

  • 有些处理器需要每个指令周期多次振荡,有些处理器在比较时钟周期与指令周期时是一对一的。

  • 术语“指令周期”甚至没有出现在 STMicro 提供的整个数据表中,也没有出现在他们的编程手册(列出处理器的指令集,顺便说一句)中。然而,8051 文档除了其机器周期特性之外,还明确定义了其指令周期执行时间。


所有指令都需要一个以上的时钟周期才能执行。获取、解码、执行。如果您在 stm32 上运行,则由于 prom 的缓慢,每次读取可能会花费几个时钟,如果从 ram 运行,谁知道它是 168Mhz 还是更慢。 Arm 总线通常需要多个时钟周期才能完成任何操作。

没有人再谈论指令周期,因为它们不是确定性的。答案总是“视情况而定”。

建造一辆汽车可能需要 X 小时,但如果你开始建造一辆汽车,然后 30 秒后开始建造另一辆汽车,每 30 秒开始建造另一辆汽车,那么 X 小时后,你将每 30 秒拥有一辆新车。这是否意味着制造一辆车需要30秒?当然不是。但这确实意味着一旦启动并运行,您就可以在该生产线上平均每 30 秒生产一辆新车。

这正是处理器的工作方式,每条指令需要多个时钟才能运行,但是您将它们管道化,以便同时在管道中运行许多时钟,这样平均下来,如果每个时钟向核心提供正确的指令,每个时钟可以完成一个指令。对于分支和缓慢的内存/ROM,您甚至不能指望得到它。

如果你想在你的处理器上做一个实验,那么用几百个 nop 做一个循环

beg = read time
load r0 = 100000
top:
  nop
 nop
nop
nop
nop
nop
...
nop
nop
nop
r0 = r0 - 1
bne top
end = read timer

如果完成该循环需要几分之一秒的时间,那么要么增加 nop 的数量,要么让它运行更多数量级的循环。实际上,您希望达到大量的计时器滴答声,不一定是挂钟上的秒或分钟,而是大量的计时器滴答声。

然后进行数学计算并计算平均值。

使用位于 ram 而不是 rom 中的程序重复实验

将处理器时钟减慢至不需要闪存除数的最快时间,从闪存重复运行。

作为 cortex-m4,打开 I 缓存,使用闪存重复,使用 ram 重复(168Mhz)。

如果您没有使用相同的测试循环从所有这些实验中获得一系列不同的结果,那么您可能做错了什么。

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

处理器指令周期执行时间 的相关文章

  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • HAL 锁定和解锁函数如何使用以及为什么?

    我试图理解另一位程序员编写的代码 它使用了I C http en wikipedia org wiki I C2 B2C通信以将数据写入 STM32 微控制器的 EEPROM 一般来说 我理解他的代码是如何工作的 但我不明白他为什么使用HA
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • PHP 执行时间导致响应延迟[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我故意在我的服务器上运行一个持续长达 60 秒的 php 脚本 每次运行之间都有延迟 问题是 在脚本执行期间发送到服务器的任何其他请求都会
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 如何计算 Django 中视图的执行时间?

    这是我的观点 def post detail request year month day slug post get object or 404 models Post slug slug status published publish
  • 如何估计方法的执行时间?

    如果需要超过两秒才能完成并在另一个线程上重新启动它 我需要取消方法执行 那么 有没有什么方法 回调机制 HACK 我可以让方法通知我它超过了 2 秒的时间限制 在 C 中检查网络驱动器是否存在并超时 https stackoverflow
  • ARM Cortex M4 SVC_Handler“UsageFault”

    我正在为个人迷你 ARM 内核项目创建一个上下文切换程序 并且该上下文切换程序完全用汇编语言编写 问题是 当我进行 SVC 调用 svc 0 时 我会输入 SVC Handler 但是当我尝试执行下一条指令时 我会输入不同的处理程序 Usa
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • ARM Cortex-M4 中不同情况的条件汇编分支指令持续时间是多少?

    我试图确定下面简单延迟循环的时钟周期的确切持续时间 loop subs r2 r2 1 bne loop The Cortex M4 技术参考手册 https developer arm com documentation ddi0439
  • java 方法的执行时间较长

    我正在 CentOS 5 4 VPS 上运行 java 服务器 VPS统计 2 5GHz单核CPU 2GB 内存 OpenJDK 1 6 也尝试过Sun JDK 1 7 我发现 java 进程的 CPU 使用率非常高 然后我尝试分析 jav
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • 在 ARM Cortex-M3 上编写一个简单的 C 任意代码执行漏洞?

    我正在尝试用 C 语言编写概念验证 演示从 ARM Cortex M3 堆栈中的内存缓冲区执行代码 这将有助于证明正确使用 ARM MPU 可以防止此类攻击 我认为将一些代码放入堆栈的一种快速而肮脏的方法是从常规函数复制它 然后使用 got
  • NTP请求包

    我试图弄清楚我需要在 NTP 请求包中发送 客户端 什么才能从服务器检索 NTP 包 我正在 Cortex M3 Stellaris LM3S6965 上使用 LWIP 据我了解 我将收到 UDP 标头 然后收到具有不同时间戳的 NTP 协
  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • arm gcc工具链为arm-elf或arm-none-eabi,有什么区别?

    当您构建 gcc 工具链时 可以将其构建为arm elf 或arm none eabi 但是有什么区别呢 我今天使用 eabi 但这只是因为其他人似乎都这样做 但由于这是一个非常糟糕的论点 因此理解其中的差异真的很高兴 注意 此工具链将为基
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 了解 ctags 文件格式

    我使用 Exhuberant ctags 来索引我的 c 项目中的所有标签 c project 是 Cortex M7 微控制器的嵌入式软件 结果是一个标签文件 我正在尝试阅读该文件并理解所写的内容 根据我找到的 ctags 和 Exhub
  • stm32l0: 执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错

    我正在使用 Nucleo STM32L031 和 AC6 STM32 工作台 eclipse 我编写应用程序并进入调试模式 一切正常 直到我在应用程序中添加另一个功能 我注意到当我删除 评论 新函数 软件可以再次进入调试模式 但是当我添加

随机推荐

  • 如何让 VBO 使用 Python 和 PyOpenGL

    以下 Python 程序应在窗口的右上象限绘制一个白色三角形 import pygame from OpenGL GL import from ctypes import pygame init screen pygame display
  • Ebnf – 这是 LL(1) 语法吗?

    我发现了以下内容EBNF在维基百科上 描述了 EBNF letter A B C D E F G H I J K L M N O P Q R S T U V W X Y Z digit 0 1 2 3 4 5 6 7 8 9 symbol
  • Java - 旋转数组

    所以目标是向右旋转数组中的元素a次 举个例子 如果a 2 然后array 0 1 2 3 4 会成为array 3 4 0 1 2 这是我所拥有的 for int x 0 x lt array length 1 x array x a ar
  • Java 打印包含整数的字符串

    我有一个疑问 public static void main String args throws IOException int number 1 System out println M number 1 Output M11 但我想把
  • 从 Rails 外部的 HAML 内部渲染 HAML 部分

    我正在使用 HAML 为网站生成一些静态 html 页面 并且我想将公共组件拆分为可以包含在多个页面中的部分 就像在 Rails 中一样 然而 我不想使用整个 Rails 堆栈来执行此操作 因为这看起来有些过头了 我在互联网上环顾四周 但没
  • java中的equals()和运算符“==”

    我知道equals 将比较对象的值 运算符将检查变量是否指向同一内存 我不明白怎么办equals 比较对象的值 例如 class Test public Test int x float y this x x this y y int x
  • 有时,在乒乓球比赛中球不会从球拍上弹起

    我有一个简单的乒乓球游戏 大部分效果都很好 但有时会出现球不弹起球拍的情况 球沿着桨叶摆动和滑动 桨叶似乎用磁力拉动球 如动画所示 每次当球周围的矩形碰撞桨矩形时 球的方向就会改变 if ball colliderect paddleLef
  • 如何从 Python 中的任何应用程序捕获剪贴板事件(相当于 onChangeClipboard)

    我正在研究剪贴板管理器 我当前的问题是成功捕获任何应用程序对剪贴板的修改 例如 从 ctrl c 右键单击并复制到剪贴板 这个想法是Python脚本在后台运行 就像一个恶魔一样 捕捉剪贴板的每一个变化 万分感谢 附 对于了解 autohot
  • SQL grant 在多个对象上执行

    大家好 我想为用户添加多个对象的执行权限 但我似乎无法在代码中添加通配符 GRANT EXECUTE ON OBJECT dbo CREATESERVERSESSIONS TO domain user 这可行 但我有很多以 XU 开头的存储
  • CosmosDB 按值将结果排序到数组中

    我有一些如下所示的 CosmosDB 文档 ProductId 1 Status true Code 123456 IsRecall false ScanLog Location type Point coordinates 13 5957
  • 无法打开登录请求的数据库。登录失败。用户登录失败

    我从我的一台计算机复制了一个数据库并在这里使用它 在尝试打开需要从数据库获取内容的页面时 在 con open 上我收到此异常 无法打开物理文件 E Program Files Microsoft SQL Server MSSQL10 SQ
  • ImportError:DLL 加载失败:动态链接库 (DLL) 初始化例程失败

    我在 Conda 环境中使用 CUDA Toolkit v9 0 和 cuDNNv7 1 以及 Python 3 6 安装了具有 CPU 支持的 TensorFlow 我按照 TensorFlow 网站中描述的说明进行操作 当我尝试时 im
  • 使用异步 chrome.storage 时如何重构全局变量?

    要在迁移到 MV2 事件页面或 MV3 Service Worker 时删除持久 MV2 后台脚本中使用的全局变量 我找到的所有指南都只给出了一个示例 用几行设置替换单个全局变量 然后开始使用chrome storage 但我仍然不清楚如何
  • 使用fragmentStatePagerAdapter更新viewpager中的片段/视图

    需要一些帮助来解决我在使用 viewpager 时更新页面的问题 我正在使用带有 FragmentStatePagerAdapter 的简单视图分页器 我想要做的就是访问当前片段 视图 以便我可以更新片段 视图中的一些文本视图 我在论坛里搜
  • 将 Interlocked.CompareExchange 与类一起使用

    System Threading Interlocked CompareExchange运算符提供比较和交换操作的原子 因此线程安全 C 实现 例如int i 5 Interlocked CompareExchange ref i 10 5
  • 当期望服务器端一次性响应时,长轮询与 websocket

    我读过很多关于实时推送通知的文章 总结一下 只要您不关心 100 的浏览器兼容性 websocket 通常是首选技术 但是 一篇文章指出 长轮询 可能当您与以下对象交换单个呼叫时 服务器 服务器正在后台做一些工作 这正是我的情况 用户按下一
  • 运算符的递归应用->

    据说箭头运算符是递归应用的 但是当我尝试执行以下代码时 它在应该打印 4 的情况下却打印出乱码 class dummy public int p int operator gt return 4 class screen public du
  • HAML:仅当条件为真时才创建容器/包装元素

    远景 但我想知道是否有什么办法可以做到这样的事情 p ONLY SHOW THIS IF LOCAL VARIABLE show paras IS TRUE name 换句话说 它总是显示内部的内容 但如果 某些条件 为真 它只会在其周围包
  • 如何以表格格式将对象列表打印到文件

    我必须将对象列表打印到表格格式的文本文件中 例如 如果我有 Person 具有 getName getAge 和 getAddress 方法 对象列表 则文本文件应如下所示 Name Age Address Abc 20 some addr
  • 处理器指令周期执行时间

    我的猜测是 no operation 内在 ARM 指令应花费 1 168 MHz 来执行 前提是每个NOP在一个时钟周期内执行 我想通过文档验证这一点 有关处理器指令周期执行时间的信息是否有标准位置 我试图确定 STM32f407IGh6