你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32从Flash中运行程序的时序分析

[复制链接]
incompletely 发布时间:2008-9-3 13:25
在Flash的速度比CPU慢的情况下,并不能简单地说程序的执行是否有等待周期;请看下面的分析:* }2 ~: n! e9 [  P4 T9 I: n
- o5 ]% y  |4 c7 a6 m* l6 h( e
首先,STM32的内部Flash是组织成64位宽度,即每次可以读出64位;在Flash与CPU的取指队列之间有两个缓冲器,用于暂存Flash中取出的指令,见下图。 2 |8 ^$ v# {- Y
点击查看图片
' |: j; P. r, y0 q8 A/ P其次,STM32的指令有16位的也有32位的,指令是从图中绿色的缓冲器取出;当绿色缓冲器变空时,黄色缓冲器中的内容会被复制到绿色缓冲器中;这样取指与读取Flash互不干扰。
/ a/ f& O0 w( P( L4 v! y/ {正因为STM32的指令有不同长度,所以程序执行的等待周期与程序的内容有关。
8 m7 S2 |! G- ]. c  X8 d. x
% q6 ~- B: b: T: [9 C0 y" m图一是假定所有指令都是16位的指令:
* d( Z+ K. G( o3 j: }8 Y" l1)时刻t0时黄色缓冲器和绿色缓冲器都为空,此时CPU等待3个周期后,到时刻t1时才能读到指令;3 s2 z; @' H2 r; |7 W% D
2)时刻t1时绿色缓冲器被填满,黄色缓冲器仍为空,Flash控制器继续读取后续指令;
+ u$ k$ q) o  r  R9 Q# E9 o, ]3)时刻t2时绿色缓冲器还有两个字节,黄色缓冲器被填满;此时因为两个缓冲器都有数据,读取Flash的操作暂停(图一中的绿色虚线框所示);
8 l- u% b1 b/ X( A* j' J; `# o( W# N4)当黄色缓冲器变空时,绿色缓冲器被复制到黄色缓冲器,同时恢复读取Flash的操作;
( b! w9 |3 ^6 ?7 _& u  i0 ^2 t* U5)时刻t3时缓冲器的状态又变为上述第3)步的状态。
' N! n1 v6 v2 a# P从以上分析可以看出,CPU的指令执行是没有等待周期的。但当执行跳转指令时,Flash缓冲器中的内容作废,系统回到了上述第1)步的状态。
4 m% i: u( q! ]3 v1 S7 s6 {' ]- l0 a! y$ @3 f  B9 a+ N* D/ a
图二是假定每三条指令中有两条16位的指令和一条32位的指令。这种情况下,如图所示,CPU的指令执行也是没有等待周期的。
3 x2 B. d! I5 y: r% h. f) H! X
2 I7 A! W0 @$ i  b4 L% l  j" A& o图三是假定所有指令都是32位的指令,从图中可看出,CPU每执行两条指令,要插入一个等待周期。
4 T- J4 |6 I, O5 X9 T2 i; h0 t( x/ j3 l3 r- F. p1 ^  Q/ x: R
上面的分析只是针对每个CPU周期都有取指操作的情况,而实际的操作中情况并没有这么简单,因为Cortex-M3的指令不都是单周期指令。
1 ^4 y( k8 f2 z2 O9 N' J所以说,实际的程序执行情况是受很多因素影响的,单纯静态的分析也是不现实的,因此才会出现这么多评测的标准和数据。我们应该以平均的性能指标作为参考的依据,而不是简单的有没有或有多少等待周期作为判断的依据。
8 T6 `" }/ m, K) Q: B6 N5 F6 Y: ]! _
出处:浪淘沙
赞 收藏 评论1 发布时间:2008-9-3 13:25

举报

1个回答
zengyi703-16313 回答时间:2016-11-21 08:11:26
学习了

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版