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 寄存器是啥意思?