打印

关于延时函数的问题,变量定义类型影响延时时间

[复制链接]
2774|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
411847411|  楼主 | 2012-12-18 18:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void delay(uint x)
{
     uchar y;
     for(x;x>0;x--)
      for(y=110;y>0;y--);
}

这个延时函数。局部变量y,如果定义为char型的 delay(500);延时时间为174毫秒。修改为int型的则可以延时501毫秒。而且初始化时间也不一样,同样的程序初始化需要的时间也不一样char型的执行完初始化函数需要17毫秒。但是修改为int型为50毫秒。这是怎么回事啊,是编译器的问题么。PIC16F877A
沙发
zhengzhou86| | 2012-12-19 15:34 | 只看该作者
如果你想知道准确的时间,可以在软件仿真时使用STOPWATCH查看精确时间

使用特权

评论回复
板凳
huangxz| | 2012-12-19 23:58 | 只看该作者
不是编译器的问题,因为你用的是8位机,你char类型的进行一次加法只要1条指令,而int类型的却要两条指令才能完成。

使用特权

评论回复
地板
与时俱进| | 2012-12-23 12:28 | 只看该作者
这个很简单嘛,你把Disassembly List(View菜单里)调出来,看看两种写法都怎么编译的,你就明白了,不用多做解释。

使用特权

评论回复
5
Ryanhsiung| | 2012-12-23 15:51 | 只看该作者
huangxz 发表于 2012-12-19 23:58
不是编译器的问题,因为你用的是8位机,你char类型的进行一次加法只要1条指令,而int类型的却要两条指令才能完 ...

INT 应该不只多一倍的指令,可以更多。
所以时间会差很多。正常

LZ具体看汇编出来的代码,可以确定一个循环执行了几条指令

使用特权

评论回复
6
Ryanhsiung| | 2012-12-23 15:51 | 只看该作者
LZ可以换成16位机或者32位机,时间就应该一至了。

使用特权

评论回复
7
yewuyi| | 2012-12-24 08:49 | 只看该作者
请不要写这样的函数,这种函数基本不会有什么好处

使用特权

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

本版积分规则

2

主题

8

帖子

1

粉丝