请问这个微秒级的子函数对吗?

[复制链接]
2159|7
 楼主| Guillaume_Meng 发表于 2012-7-25 16:44 | 显示全部楼层 |阅读模式
请问这个微秒级的子函数对吗?

void delayms(uint t)   //延时子程序
{
uint i;
    for(i=t;i>0;i--,_nop_());
}

_nop()是1us,那我把z的值设多少就是延时多少微秒,对吗?谢谢!
joyme 发表于 2012-7-25 16:56 | 显示全部楼层
不对,for循环本身就需要执行时间,你看编译后的结果就知道了
joyme 发表于 2012-7-25 16:57 | 显示全部楼层
即1MIPS(即指令周期为1us)的情况下,根本做不到1us的延时
airwill 发表于 2012-7-25 19:35 | 显示全部楼层
循环里:
一条 nop 和 一条 DJNZ 指令, 需要3个uS(36个机器周期)
ningling_21 发表于 2012-7-25 23:24 | 显示全部楼层
看汇编就知道了...
wukunshan 发表于 2012-7-27 00:04 | 显示全部楼层
进入函数需要时间,执行for语句需要时间。具体要用编译器调试才确定。
Ryanhsiung 发表于 2012-7-27 08:34 | 显示全部楼层
不可能到1us,具体时间你看汇编代码会比较清楚!
  还要考虑进栈 出栈的时间,中断的影响时间!!
dlyt_test001 发表于 2012-7-27 10:02 | 显示全部楼层
要考虑FOR的判断时间,和此函数的进入及退出时间!
还要考虑编译器的影响。
看汇编会清楚一点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

265

帖子

0

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