打印
[C语言]

关于while(1);循环使用的一些问题

[复制链接]
3801|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
花丶丶丶落|  楼主 | 2015-5-12 10:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

while语句的原型是while(表达式)语句,当表达式为非0值时,执行while语句中的嵌套语句。那么while(1)其中1代表一个常量表达式,他永远不会等于0。所以,循环会一直执行下去。除非你设置break等类似的跳出循环语句循环才会中止。
1就是永远为真,所以说while(1)就是个死循环,我们需要程序不断回到开始或者某一点开始执行,我们就会使用一个while(1)循环。

单片机中while(1)有两种用途,
while(1);
意义:这是一个死循环,代码不再向下执行。
用途:
1. 一般在调试代码时,为了检测一部分代码是否OK,防止后面的代码干扰执行结果,会在观测点加上while(1);
2. 有些代码检测到运行错误时,会抛出错误(打印、设置错误码),然后进入while(1);
3.  机器需要复位时,停止喂看门狗,进入while(1); 迫使看门狗超时,产生硬件复位

while( 1 ) { 代码 }
意义:这里将会重复执行{}中的代码
用途:
1.  单片机在不使用操作系统时,主程序一般都使用这种架构
2. 操作系统中的进程,执行任务时,有些也会使用这种架构
3. {}中的代码不停地检测某个条件,当条件符合时,跳出该循环,继续向下执行

我们在单片机中使用while(1),大部分还是为了防止程序跑飞,因为很多时候执行完某段程序后单片机的程序指针PC(就是程序指针)并不会停止,仍然会继续从ROM中读取指令并执行,这样一来可能会出现程序跑飞的情况,进而出现不确定的结果,我们加个while(1)就能让程序在执行完后在原地循环,相当于停在原地,防止跑飞。


这样的解释已经对while(1);作用介绍的很详细了  
但是我感觉我好像钻到一个牛角尖里面去了  那就是比如我现在写了几个函数的封装 有一个函数后面有个一while(1);我现在在主函数里去调用这个有while的函数 调用之后进入while函数里去执行 执行到while语句的时候就进入无限循环等待 可是我后面还有程序要执行 那岂不是我程序就卡在这出不来了这个就是牛角尖所在  请高手解答疑惑

相关帖子

沙发
diweo| | 2015-5-12 11:04 | 只看该作者
所以你被调函数里面不能有while(1),除非是你特意想在满足一定条件时去调用它,从而造成死机假象

使用特权

评论回复
板凳
花丶丶丶落|  楼主 | 2015-5-12 11:36 | 只看该作者
diweo 发表于 2015-5-12 11:04
所以你被调函数里面不能有while(1),除非是你特意想在满足一定条件时去调用它,从而造成死机假象 ...

貌似有点懂了  之前我看了个例程  中间有个被调用的函数 末尾用了while(1);   听你这个一说可能是需要满足一个特定条件才能跳出去    我在琢磨琢磨  还是有点想不通

使用特权

评论回复
地板
diweo| | 2015-5-12 15:12 | 只看该作者
本帖最后由 diweo 于 2015-5-12 15:17 编辑
花丶丶丶落 发表于 2015-5-12 11:36
貌似有点懂了  之前我看了个例程  中间有个被调用的函数 末尾用了while(1);   听你这个一说可能是需要 ...

如果是只有while(1);的话,不用特殊方法是跳不出去的。
如果是while(1)
{
//含有break或return的代码
}
那么才可能




使用特权

评论回复
5
xyz549040622| | 2015-5-12 15:12 | 只看该作者
比如,一直在while(1)里面循环一段代码,然后检测到某一个按键或者外部输入的值改变后,用return就可以跳出这个子程序。

使用特权

评论回复
6
中国微电脑网| | 2015-5-13 16:14 | 只看该作者
可以使用一个变量的!

使用特权

评论回复
7
whtwhtw| | 2015-5-13 16:35 | 只看该作者
while(1)
{
....
return ?;或者break;
}
这样的结构还是不少的

使用特权

评论回复
8
叶伤| | 2015-5-15 11:30 | 只看该作者
while(1){if(Key)break;};//等待按键按下就跳出

使用特权

评论回复
9
linjiafa519| | 2015-5-30 18:52 | 只看该作者
刚刚在学单片机,受教了

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝