谁能用具体实例说明死循环while(1)的必要性


用C编写单片机程序时常用到while(1),目的是让程序死循环。
一点质疑:
我现在编写的较简单程序比如流水灯、控制LED的循环亮灭等不加while(1)实际效果和加while(1)是一样的,那么这个while(1)有无必要呢?
还有传说中的没有while(1)程序跑飞是怎么回事?
谁能用具体实例说明while(1)的必要性?就是说,不加while(1)显示结果是错误的

我也来说两句 查看全部回复

最新回复

  • ybzjllj (2008-7-13 09:57:55)

    如果没有while(1)
    你想一下,一段代码瞬间执行完毕,然后单片机会做什么呢?
    有了while(1),单片机永远有事可做,我们心理也明白它接下来干什么.
    驱动几个发光管,没有这个循环,好像也正常,哪是因为程序存贮器空间的代码极少,绝大多数空间都存放的是00或FF,程序跑飞后,也干不了什么坏事,代码一多,那就死了...............
  • fzpxp (2008-7-13 10:18:16)

    有实例能说明一下吗?谢谢!
  • ybzjllj (2008-7-13 10:20:32)

    是否添加while()汇编后的差异.......................................


    是否添加while()汇编后的差异.JPG

  • ybzjllj (2008-7-13 10:29:28)

    没有主循环while(1),编译后会产生一条RET返回,这是一个没有LCALL的返回,返回到什么地方去了?
    假设堆栈下面是:0000,就返回到开头,程序就会重头开始,一般程序的开始部分是开机的时候才执行的(初始化代码),这样一来,程序就会不停地初始化,单片机的工作,永远只是个开头.............

    还有更严重的,,如果堆栈下面不是0000,是什么呢?可能是什么变量,值是变化的,谁也不知它会返回到什么地方....完蛋了................
  • fzpxp (2008-7-13 11:54:12)

    谢谢ybzjllj的深入分析,原来只知道要加,现在终于从原理上明白了
  • bj301 (2008-7-15 17:11:09)

    学习一下。。。。。。。。。。。。。。。。。。。。。。
  • tianwen09 (2008-7-27 20:04:21)

    终于明白了
    谢谢
  • forpeople (2008-7-28 12:53:58)

    又学了点!
    太好了!
    谢谢!!!!