打印
[STM8]

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

[复制链接]
3560|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 (26.28 KB )

QQ截图20131122163346.jpg

使用特权

评论回复
5
feilusia|  楼主 | 2013-11-22 16:56 | 只看该作者
IJK 发表于 2013-11-22 16:17
还有判断跳转的时间,判断跳转一般要好几个周期。

我数错了,应该是23条,我没有把截图中的CALL ?MOV_10_12那三句算进去。算出来是0x54eb2,看着北京时间校准的,大概就是2s.
非常感谢!

使用特权

评论回复
6
feilusia|  楼主 | 2013-11-22 16:57 | 只看该作者
香水城主 发表于 2013-11-22 16:28
1)减一次不可能只执行一条汇编语句,至少存数取数就要好几条指令
2)while还要有指令才能行 ...

是我数错了,非常感谢你的回答

使用特权

评论回复
7
戈卫东| | 2013-11-22 18:43 | 只看该作者
要看是什么处理器,如果是32位的递减一条指令大约是够的,如果是16位或8位的,可能要若干条指令...
还有这种延时通常会用一个循环,那么循环的开销也要算进去.

使用特权

评论回复
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

主题

1956

帖子

94

粉丝