[STM8] 我想用while(i--);延时2秒,那i该为多大?

[复制链接]
 楼主| feilusia 发表于 2013-11-22 16:02 | 显示全部楼层 |阅读模式
我不太明白我这样计算的值为什么会错,望指教。

我的时钟是内部16M无分频时钟。
通过反汇编知道减一次需要执行一条汇编语句。
所以减一次的时间=机器周期=1/(16M)。
所以2S所需要减的次数i=2/(1/(16M))=8000000=0x7A1200.

但是我仿真发现这个值能延时十几二十秒,实际上的值应该在0x80000左右。
IJK 发表于 2013-11-22 16:17 | 显示全部楼层
还有判断跳转的时间,判断跳转一般要好几个周期。
香水城主 发表于 2013-11-22 16:28 | 显示全部楼层
1)减一次不可能只执行一条汇编语句,至少存数取数就要好几条指令
2)while还要有指令才能行
 楼主| feilusia 发表于 2013-11-22 16:46 | 显示全部楼层
IJK 发表于 2013-11-22 16:17
还有判断跳转的时间,判断跳转一般要好几个周期。

我之前连接电路板仿真时用step in,发现DISASSEMBLY框里的汇编不会走,所以我以为只有一条。
后来把仿真设置改为simulator后就可以一步一步运行汇编语句了。
我数了下是20条指令。
那计算出来的是0x186A00,试了下,大概在8s,还是大了点:L
QQ截图20131122163346.jpg
 楼主| feilusia 发表于 2013-11-22 16:56 | 显示全部楼层
IJK 发表于 2013-11-22 16:17
还有判断跳转的时间,判断跳转一般要好几个周期。

我数错了,应该是23条,我没有把截图中的CALL ?MOV_10_12那三句算进去。算出来是0x54eb2,看着北京时间校准的,大概就是2s.
非常感谢!
 楼主| feilusia 发表于 2013-11-22 16:57 | 显示全部楼层
香水城主 发表于 2013-11-22 16:28
1)减一次不可能只执行一条汇编语句,至少存数取数就要好几条指令
2)while还要有指令才能行 ...

是我数错了,非常感谢你的回答
戈卫东 发表于 2013-11-22 18:43 | 显示全部楼层
要看是什么处理器,如果是32位的递减一条指令大约是够的,如果是16位或8位的,可能要若干条指令...
还有这种延时通常会用一个循环,那么循环的开销也要算进去.
 楼主| feilusia 发表于 2013-11-23 09:07 | 显示全部楼层
戈卫东 发表于 2013-11-22 18:43
要看是什么处理器,如果是32位的递减一条指令大约是够的,如果是16位或8位的,可能要若干条指令...
还有这种延 ...

嗯,所以我反汇编地去数汇编语句,也就包含了循环的语句。STM8在IAR下是23条,STM32在MDK下是4条。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:1、博客:http://blog.csdn.net/feilusia 2、QQ群:STM8/STM32群(164311667);职场交流群(450154342);CC2640R2F群(557278427) 3、淘宝店:https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

135

主题

1966

帖子

94

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