[C语言] 关于for循环问题

[复制链接]
4818|32
 楼主| 游浪星 发表于 2013-9-23 08:43 | 显示全部楼层 |阅读模式
在keil C51中 这两个循环有什么区别?
#include<reg51.h>
#define uint unsigned int
sbit Yellow=P2^1;
void main()
{
        unsigned int  i,j;
        while(1)
        {
                Yellow=~Yellow;
                for (i=0;i<32768;i++);
                //for (i=32768;i>0;i--);
        }
}
为什么用第一个for循环时,黄灯闪烁频率明显比第二个小?两个for循环延时的时间不是一样的吗?
ayb_ice 发表于 2013-9-23 08:46 | 显示全部楼层
数学上也是不完全一样的
galton1982 发表于 2013-9-23 08:55 | 显示全部楼层
减的比加的要快  具体请看汇编
 楼主| 游浪星 发表于 2013-9-23 09:08 | 显示全部楼层
ayb_ice 发表于 2013-9-23 08:46
数学上也是不完全一样的

          for (i=0;i<32768;i++);
          for (i=0;i<32767;i++);
那用这两个循环,闪烁频率也相差很多?uint范围是0~65535根本没超过范围呀
 楼主| 游浪星 发表于 2013-9-23 09:10 | 显示全部楼层
galton1982 发表于 2013-9-23 08:55
减的比加的要快  具体请看汇编

         for (i=0;i<32768;i++);
          for (i=0;i<32767;i++);
那用这两个循环,闪烁频率也相差很多?uint范围是0~65535根本没超过范围呀
sjnh 发表于 2013-9-23 09:26 | 显示全部楼层
for (i=0;i<32768;i++),每一次循环要做一次16位减法,然后根据减法结果判断是否满足条件;
for (i=32768;i>0;i--),每一次循环只需将数据装入寄存器A中就知道是不是0了(都是无符号不可能小于0),没必要做减法,指令少很多;
具体看编译后的汇编列表;

评论

知道减法的效率要高,实际应用还是习惯加法呵呵  发表于 2013-9-23 22:21
楼主倒是给大家提醒了一种优化循环的方法哈~!  发表于 2013-9-23 09:37

评分

参与人数 4威望 +6 收起 理由
WM~~~ + 1 赞一个!
游浪星 + 1 赞一个!
yueyinji1989 + 2
sxhhhjicbb + 2 很给力!

查看全部评分

ayb_ice 发表于 2013-9-23 09:27 | 显示全部楼层
谁说了,这两个应该一样快,或者差不多呢

道理不很简单吗

假设一个循环相差一个周期,32768个周期下来也不简单啊,何况肯定不止一个周期呢
anjf163 发表于 2013-9-23 09:36 | 显示全部楼层
第二个循环快些。编译出来汇编代码短些。6楼解释很清楚了。
dirtwillfly 发表于 2013-9-23 10:09 | 显示全部楼层
学习了,理论果真要联系实际才行
tergy2012 发表于 2013-9-23 11:47 | 显示全部楼层
循环啊
浪浪云 发表于 2013-9-23 12:16 | 显示全部楼层
看了六楼真是长知识了
yu080301021 发表于 2013-9-23 13:07 | 显示全部楼层
学习了 顶六楼
solidboy 发表于 2013-9-23 14:43 | 显示全部楼层
学到知识了,六楼很厉害的样子
SevenWans 发表于 2013-9-23 15:09 | 显示全部楼层
围观6666666666666666666
江枫渔火 发表于 2013-9-23 16:48 | 显示全部楼层
围观14楼~
么么沫沫 发表于 2013-9-23 17:43 | 显示全部楼层
吼吼,围观中,以前从没想过这个问题。
李冬发 发表于 2013-9-23 18:10 | 显示全部楼层
第二个循环效率本身就是高啊,只是很拗口,我一般还是用第一个循环。
haitun1895 发表于 2013-9-23 18:19 | 显示全部楼层
还真么有想过这样的问题;  每次都是在keil里面看下时间的;
s200522056 发表于 2013-9-23 21:45 | 显示全部楼层
所以还是要用计时器精确计时
symbochang 发表于 2013-9-23 21:55 | 显示全部楼层
两者汇编代码量不一样的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

45

帖子

0

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