打印
[STM32F1]

再请教STM32执行时间问题

[复制链接]
4758|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方式来操作这个寄存器的。。。。。外设本身提供了更好的方式。。。。

使用特权

评论回复
5
df_flying| | 2014-3-4 16:48 | 只看该作者
在线编译下看看对应的汇编程序,那里算起来方便也简单

使用特权

评论回复
6
mmuuss586| | 2014-3-4 18:04 | 只看该作者
本帖最后由 mmuuss586 于 2014-3-5 10:22 编辑

要求高,程序可以放RAM里跑。

使用特权

评论回复
7
香水橙| | 2014-3-4 21:26 | 只看该作者
mmuuss586 发表于 2014-3-4 18:04
要求高,程序可以放SDRAM里跑。

要求高,程序应该放在Flash 里跑!

使用特权

评论回复
8
mmuuss586| | 2014-3-4 21:28 | 只看该作者
香水橙 发表于 2014-3-4 21:26
要求高,程序应该放在Flash 里跑!

我说的是速度。

使用特权

评论回复
9
香水橙| | 2014-3-4 21:34 | 只看该作者
mmuuss586 发表于 2014-3-4 21:28
我说的是速度。

我也说的是速度。

使用特权

评论回复
10
mmuuss586| | 2014-3-4 21:46 | 只看该作者
香水橙 发表于 2014-3-4 21:34
我也说的是速度。

解释下呗。
为啥放内部FLASH里快?

使用特权

评论回复
11
ilovezeno| | 2014-3-4 22:20 | 只看该作者
捂脸,两个人说的都有问题。。。。。别争了 。。。。。没有分支的话,flash里跑也有可能没有sram快的,取决于是f几,f1没分支的是flash快,f4是sram第一块最快。。。。sdram的那位是在说胡话。。。。

使用特权

评论回复
12
香水橙| | 2014-3-4 23:16 | 只看该作者
回11#:LZ说的是F1,请看标题。

回10#:请看香主以前的分析;这是由系统的总线结构决定的,而不是RAM或Flash本身的速度决定的。

使用特权

评论回复
13
bowei181| | 2014-3-5 08:18 | 只看该作者
貌似第一个时间短

使用特权

评论回复
14
ZhangStudy| | 2014-3-5 08:24 | 只看该作者
干嘛不用PWM控制。 高速CPU,单个指令的执行时间不好确定的。

使用特权

评论回复
15
cool_coder| | 2014-3-5 12:43 | 只看该作者
置F口电平的目的是什么?只关心操作的实时性,还是要求F口输出信号的时序精准?设计要求不同,做法也会有差别的……

使用特权

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

多谢大侠,
   我这个代码经过编译应该是烧录到内部FLASH的。。。。大侠指的FLASH是? STM单片机刚学。。。。

使用特权

评论回复
17
magic_yuan|  楼主 | 2014-3-5 17:24 | 只看该作者
mmuuss586 发表于 2014-3-4 18:04
要求高,程序可以放RAM里跑。

多谢大侠,
   大侠指的RAM是外部RAM?

使用特权

评论回复
18
mmuuss586| | 2014-3-5 17:26 | 只看该作者
本帖最后由 mmuuss586 于 2014-3-6 08:46 编辑
magic_yuan 发表于 2014-3-5 17:24
多谢大侠,
   大侠指的RAM是外部RAM?

内部,还和程序结构,MCU结构有关。

使用特权

评论回复
19
magic_yuan|  楼主 | 2014-3-5 17:29 | 只看该作者
mmuuss586 发表于 2014-3-5 17:26
外部。

多谢,
  外部RAM的话,CPU要读外部的RAM到内存,然后再输出到管脚。如果是内部FLASH的话,那就是先读内部FLASH到内不能,然后再输出到管脚。这个时序正确吧?
  大侠意思是读RAM时间比读FLASH时间短?
  后面我想改用M4来做,不知道哪个速度更快。

使用特权

评论回复
20
mmuuss586| | 2014-3-5 17:39 | 只看该作者
magic_yuan 发表于 2014-3-5 17:29
多谢,
  外部RAM的话,CPU要读外部的RAM到内存,然后再输出到管脚。如果是内部FLASH的话,那就是先读内 ...

程序从内部FLASH加载到内部RAM里跑,最快

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

359

主题

2770

帖子

7

粉丝