stm32学习笔记——时钟周期,指令周期,机器周期

stm32学习笔记——时钟周期,指令周期,机器周期


草稿状态,有空再整理


stm32f103c8t6,在cubeIDE中执行一个自加程序,systick寄存器中的值从71829变到71792,一个自加程序用了37个时钟周期吗?
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

在这里插入图片描述

将变量定义的volatile去掉,汇编指令变少,systick寄存器的值变化也变少,71844-71827=17

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

在 keil 中试试

在这里插入图片描述
keil 中可以单步执行汇编指令,一共两个指令,第一下执行了 7 个时钟周期,states+2,第二下执行了 6 个时钟周期,state+1,加起来和 cubeIDE 中差不多,cubeIDE 中有三条汇编指令,keil 中只有两条,汇编差异可能是两个 IDE 导致的,也可能是代码改动导致的,因为在 keil 中尝试的时候,无法在 temp2++处打断点,代码有点小改动。

https://zhuanlan.zhihu.com/p/461519409
结论:一个指令周期包含多个机器周期,而一个机器周期包含多个时钟周期
指令周期:CPU 从存储器中取出并执行一条指令所需的全部时间称之为指令周期(多级流水线,取址译码执行等)
时钟周期,主频:计算机内部主时钟的频率,通常以 MHz 或者 GHz 为单位,是生产设计 CPU 时就已经确定下来的。
机器周期,或者称为 CPU 周期,一个机器周期内包含若干时钟周期,包含时钟周期的个数称之为机器周期的时间宽度
https://zhuanlan.zhihu.com/p/447927306
CPU 的最小生命单位就是时钟周期,而一个机器周期包括若干个时钟周期,至于指令周期,则包含了若干个机器周期。如果按粒度排序,指令周期>机器周期>时钟周期。
在这里插入图片描述

keil 调试时 LDR 指令执行,state 跳了 2,systick 寄存器跳了 7

https://blog.csdn.net/qq_41092963/article/details/82759097这篇文章中指出 LDR 执行了两个时钟周期,贴出了测试结果,应该是比较可信的
在这里插入图片描述
不知道是我对 systick 寄存器和这个 state 的理解有误,还是其他问题


问题:keil 调试器中 register 界面的这些 internal 寄存器是啥意思?

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值