[STM32F1] 再请教STM32执行时间问题

[复制链接]
5743|25
 楼主| magic_yuan 发表于 2014-3-4 14:08 | 显示全部楼层 |阅读模式
各位大侠,
    近来设计一个项目需要实时性,因此对STM32的指令执行时间比较关心。网上看了些资料,STM32采用三级流水线结构,平均每周期执行1.25条指令,即算下来大致10nS一条指令。
     想比较以下两条指令的执行时间。
      1,采用寄存器操作。GPIOF->CRL=0X0001000;  即将F口所有引脚置相应电位。
      2,使用位带操作 PF(0)=0;PF(1)=0;.............PF(14)=0;PB(2)=0;注意:其中PB2代替了PF的最后一个引脚。
       以上两段指令均实现对16个引脚置位电平。那分别大致消耗多少时钟周期呢?
       个人觉得操作1大致消耗一个时钟周期,而操作二则需要消耗大致16个时钟周期?
        请高手指点!十分感谢啊!
ilovezeno 发表于 2014-3-4 14:47 来自手机 | 显示全部楼层
访内操作两周期起步 总线延迟各种可能,所以周期不定。。。。
 楼主| magic_yuan 发表于 2014-3-4 14:54 | 显示全部楼层
ilovezeno 发表于 2014-3-4 14:47
访内操作两周期起步 总线延迟各种可能,所以周期不定。。。。

多谢大侠,
  访问内部寄存器最少两周期?
  那操作一和操作二差别大不?大致水平呢?
ilovezeno 发表于 2014-3-4 16:43 | 显示全部楼层
magic_yuan 发表于 2014-3-4 14:54
多谢大侠,
  访问内部寄存器最少两周期?
  那操作一和操作二差别大不?大致水平呢? ...

不是内部寄存器,那些是映射到内存地址上的外设寄存器。。。。任何访内操作都是1+N起步~如果连着N个内存读写指令,那么就是用N+1个周期 (还要看上下文的,如果因为32bit op数对齐的原因,可能也不见得可以pipeline,那么就要更多周期了)
2 都是分开操作每一个bitband地址的话,自然每一条都如上所述的周期,如果你的编译器不知道要映射到bitband,那么每一个操作就是 读-修改-写 5周期 如果映射到了bitband 就是个单纯写操作,那么如果连续那么就是1+N
另外 请读ref manual 你不应该以bitband方式来操作这个寄存器的。。。。。外设本身提供了更好的方式。。。。
df_flying 发表于 2014-3-4 16:48 | 显示全部楼层
在线编译下看看对应的汇编程序,那里算起来方便也简单
mmuuss586 发表于 2014-3-4 18:04 | 显示全部楼层
本帖最后由 mmuuss586 于 2014-3-5 10:22 编辑

要求高,程序可以放RAM里跑。
香水橙 发表于 2014-3-4 21:26 | 显示全部楼层
mmuuss586 发表于 2014-3-4 18:04
要求高,程序可以放SDRAM里跑。

要求高,程序应该放在Flash 里跑!
mmuuss586 发表于 2014-3-4 21:28 | 显示全部楼层
香水橙 发表于 2014-3-4 21:26
要求高,程序应该放在Flash 里跑!

我说的是速度。
香水橙 发表于 2014-3-4 21:34 | 显示全部楼层
mmuuss586 发表于 2014-3-4 21:28
我说的是速度。

我也说的是速度。
mmuuss586 发表于 2014-3-4 21:46 | 显示全部楼层
香水橙 发表于 2014-3-4 21:34
我也说的是速度。

解释下呗。
为啥放内部FLASH里快?
ilovezeno 发表于 2014-3-4 22:20 来自手机 | 显示全部楼层
捂脸,两个人说的都有问题。。。。。别争了 。。。。。没有分支的话,flash里跑也有可能没有sram快的,取决于是f几,f1没分支的是flash快,f4是sram第一块最快。。。。sdram的那位是在说胡话。。。。
香水橙 发表于 2014-3-4 23:16 | 显示全部楼层
回11#:LZ说的是F1,请看标题。

回10#:请看香主以前的分析;这是由系统的总线结构决定的,而不是RAM或Flash本身的速度决定的。
bowei181 发表于 2014-3-5 08:18 | 显示全部楼层
貌似第一个时间短
ZhangStudy 发表于 2014-3-5 08:24 | 显示全部楼层
干嘛不用PWM控制。 高速CPU,单个指令的执行时间不好确定的。
cool_coder 发表于 2014-3-5 12:43 | 显示全部楼层
置F口电平的目的是什么?只关心操作的实时性,还是要求F口输出信号的时序精准?设计要求不同,做法也会有差别的……

评论

关心操作的实时性。尽量做到16个口同时输出电平。谢谢啊 !  发表于 2014-3-5 17:26
 楼主| magic_yuan 发表于 2014-3-5 17:23 | 显示全部楼层
香水橙 发表于 2014-3-4 21:26
要求高,程序应该放在Flash 里跑!

多谢大侠,
   我这个代码经过编译应该是烧录到内部FLASH的。。。。大侠指的FLASH是? STM单片机刚学。。。。
 楼主| magic_yuan 发表于 2014-3-5 17:24 | 显示全部楼层
mmuuss586 发表于 2014-3-4 18:04
要求高,程序可以放RAM里跑。

多谢大侠,
   大侠指的RAM是外部RAM?
mmuuss586 发表于 2014-3-5 17:26 | 显示全部楼层
本帖最后由 mmuuss586 于 2014-3-6 08:46 编辑
magic_yuan 发表于 2014-3-5 17:24
多谢大侠,
   大侠指的RAM是外部RAM?

内部,还和程序结构,MCU结构有关。
 楼主| magic_yuan 发表于 2014-3-5 17:29 | 显示全部楼层
mmuuss586 发表于 2014-3-5 17:26
外部。

多谢,
  外部RAM的话,CPU要读外部的RAM到内存,然后再输出到管脚。如果是内部FLASH的话,那就是先读内部FLASH到内不能,然后再输出到管脚。这个时序正确吧?
  大侠意思是读RAM时间比读FLASH时间短?
  后面我想改用M4来做,不知道哪个速度更快。
mmuuss586 发表于 2014-3-5 17:39 | 显示全部楼层
magic_yuan 发表于 2014-3-5 17:29
多谢,
  外部RAM的话,CPU要读外部的RAM到内存,然后再输出到管脚。如果是内部FLASH的话,那就是先读内 ...

程序从内部FLASH加载到内部RAM里跑,最快
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:发到3000帖时,生活大概完成了一种转折。

359

主题

2770

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部