野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21106|回复: 10

请教关于Delay延时函数的具体时间

[复制链接]
发表于 2014-1-15 11:29:10 | 显示全部楼层 |阅读模式
例程中常见Delay(10000);
static void Delay(__IO u32 nCount)
{
        for(; nCount != 0; nCount--);
}
请问72M的主频,这个10000为参数的延时函数是延时多久啊?怎么计算的?
回复

使用道具 举报

发表于 2014-1-15 11:29:48 | 显示全部楼层
软件延时,都是不准确的,大概的延时而已
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-15 11:36:54 | 显示全部楼层
大概也是有个时间的嘛~
一般软件延时,是计算主频的倒数为一个机器周期,一个指令周期是4个机器周期,不知道这个空的循环函数循环一次是几个指令,是不是每个循环里两个指令:一个比较,一个自减啊~如果一次循环两个指令周期,那就是总共80000个机器周期,那就是1毫秒左右。  
求大神指示我这么推导对不对啊~
回复 支持 反对

使用道具 举报

发表于 2014-1-15 11:39:17 | 显示全部楼层
yinhao 发表于 2014-1-15 11:36
大概也是有个时间的嘛~
一般软件延时,是计算主频的倒数为一个机器周期,一个指令周期是4个机器周期,不知 ...

反汇编,看循环周期 的 语句需要多少个指令周期,乘以循环次数,就大概得到 时间(考虑到各种干扰,所以有误差的)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-15 11:47:23 | 显示全部楼层
我看到循环里面的汇编指令有7条。是否一条指令4个机器周期啊。是否用72M的倒数来计算机器周期啊。
那Delay(10000);就是延时了3.5ms左右咯~
回复 支持 反对

使用道具 举报

发表于 2014-1-15 11:50:08 | 显示全部楼层
yinhao 发表于 2014-1-15 11:47
我看到循环里面的汇编指令有7条。是否一条指令4个机器周期啊。是否用72M的倒数来计算机器周期啊。
那Delay ...

应该是单指令周期的
回复 支持 反对

使用道具 举报

发表于 2014-1-15 12:53:18 | 显示全部楼层
经验值,不要纠结这个时间,要精确延时的话用定时器或者systick
回复 支持 反对

使用道具 举报

发表于 2014-1-16 10:01:12 | 显示全部楼层
要想知道这个延时的具体时间,可以在Keil里面,这样来看运行时间:

QQ截图20140116100131.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-16 10:03:06 | 显示全部楼层
ahuzjh01 发表于 2014-1-16 10:01
要想知道这个延时的具体时间,可以在Keil里面,这样来看运行时间:

牛!  妹子高手啊~
回复 支持 反对

使用道具 举报

发表于 2014-1-16 10:04:39 | 显示全部楼层
ahuzjh01 发表于 2014-1-16 10:01
要想知道这个延时的具体时间,可以在Keil里面,这样来看运行时间:

非常感谢,学得了
回复 支持 反对

使用道具 举报

发表于 2014-1-16 10:04:53 | 显示全部楼层
yinhao 发表于 2014-1-16 10:03
牛!  妹子高手啊~

头像是妹子,本人是大老爷们啊!不好意思,让你失望了...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-30 14:11 , Processed in 0.047882 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表