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

[复制链接]
3331|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菜单里)调出来,看看两种写法都怎么编译的,你就明白了,不用多做解释。
Ryanhsiung 发表于 2012-12-23 15:51 | 显示全部楼层
huangxz 发表于 2012-12-19 23:58
不是编译器的问题,因为你用的是8位机,你char类型的进行一次加法只要1条指令,而int类型的却要两条指令才能完 ...

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

LZ具体看汇编出来的代码,可以确定一个循环执行了几条指令
Ryanhsiung 发表于 2012-12-23 15:51 | 显示全部楼层
LZ可以换成16位机或者32位机,时间就应该一至了。
yewuyi 发表于 2012-12-24 08:49 | 显示全部楼层
请不要写这样的函数,这种函数基本不会有什么好处
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

1

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