自从研究stm32以来,对mcu的运行速度一直没有一个明确的概念,困惑一直卡在这,很烦,最近有了一点心得,记录一下。

stm32的官方数据为1.25MIPS/MHZ,即每秒执行的汇编指令数应该是主频的1.25倍。

stm32f103  72M主频,所以一秒执行90M汇编指令,

stm32H743 480M主频,一秒的指令只会大于600M指令,因为有cache的存在。

执行一条c语言指令大概花费10~100ns(f103),那么H7的性能只会高于100/(480/72) = 15ns,因此,stm32 h7的性能至少为一秒50M的C语言指令。

stm32 f103的中断频率性能极限是500KHZ,H743的中断频率极限为12.5MHZ。

因此如果f103到了1K以上的中断频率也许就需要注意了,H743的则应该是10K。如果有些周期性中断中断频率达到了1K以上也许就应该重点注意它。

 

 

 

中断的触发实时的,在中断信号产生之后的一个时钟周期内(对应外设的内核时钟)中断状态寄存器就会被置位,因此中断信号的产生与被识别到基本是无时间差的,

中断寄存器在外设中,其触发nvic中断请求线,到mcu内核收到中断请求,这大概有一些时间差(很小,应该也可以忽略不计)。

mcu内核接收到中断请求,立刻开始处理中断,它需要

1.读取中断向量表,

2.跳转到中断处理函数,

3.保存寄存器,

4.读取中断函数里的第一条指令

直到开始执行,在内存零延迟的情况下(D-cache,I-cache, 即cpu在一个时钟周期内完成存取动作),这些时间统称为interrupt lentcy---中断延迟,

在《Cortex M3与M4权威指南》里明确为12个时钟周期。

 

关于H7的延时未查到,应该也是12个时钟周期吧。

 

posted on 2023-10-25 09:19  __诗酒趁年华  阅读(1751)  评论(0编辑  收藏  举报