打印
[疑难问答]

单片机 while(1)

[复制链接]
5573|50
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yorkbarney|  楼主 | 2024-4-27 15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

单片机中while(1)有两种用途,

while(1);

意义:这是一个死循环,代码不再向下执行。

用途:

1.让主函数只循环一次

2.一般在调试代码时,为了检测一部分代码是否OK,防止后面的代码干扰执行结果,会在观测点加上while(1);

3. 有些代码检测到运行错误时,会抛出错误(打印、设置错误码),然后进入while(1);

4.  机器需要复位时,停止喂看门狗,进入while(1); 迫使看门狗超时,产生硬件复位


while( 1 ) { 代码 }

意义:这里将会重复执行{}中的代码

用途:

1.  单片机在不使用操作系统时,主程序一般都使用这种架构

2. 操作系统中的进程,执行任务时,有些也会使用这种架构

3. {}中的代码不停地检测某个条件,当条件符合时,跳出该循环,继续向下执行


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


原则上来讲,如果程序中没有加结尾的话,程序计数器会继续累加,从而执行正常程序后面的ROM空间里面的指令,不过一般这个指令都是0XFF,这就要看这条指令的含义了,如果是空的话就会一直执行到最后,直到程序计数器溢出,只是不知道程序计数器发生溢出是一个什么状态,有可能回到复位状态值,也有可能直接就让单片机死在这里不工作,这个就要看单片机的具体设计了。


在主程序里应当有

while(1)

{

  ..;

}

否则单片机的程序会继续按地址运行下去,到0ffffh后-》00000h。

如果不加while(1)语句,单片机依然正常运行,就是后面的地址里恰好有什么东西使得程序形成死循环,没有飞跑,那也是凑巧。


使用特权

评论回复
沙发
梅花香自123| | 2024-8-23 00:25 | 只看该作者
这种结构表示将不断重复执行 {} 内的代码。由于嵌入式系统通常没有操作系统,主程序在运行时需要持续执行特定的任务,所以这种循环是必要的。

使用特权

评论回复
板凳
51xlf| | 2024-10-11 08:45 | 只看该作者
在单片机编程中,while(1) 是一个无限循环语句,它会一直执行,直到程序被外部中断或复位。这种循环通常用于保持程序的运行状态,或者等待某个事件发生。

使用特权

评论回复
地板
febgxu| | 2024-10-11 10:30 | 只看该作者
在嵌入式系统中,while(1) 用于确保程序不会执行完毕后退出。由于嵌入式系统的特性,程序通常需要持续运行以处理实时任务。

使用特权

评论回复
5
claretttt| | 2024-10-11 10:51 | 只看该作者
while(1) 是一个常见的循环结构。

使用特权

评论回复
6
loutin| | 2024-10-12 07:15 | 只看该作者
通过在 while(1) 循环中合理安排代码执行顺序,可以编写非阻塞代码,使得单片机能够同时处理多个任务。

使用特权

评论回复
7
geraldbetty| | 2024-10-12 07:31 | 只看该作者
这个循环会一直执行,直到系统复位或断电。

使用特权

评论回复
8
cashrwood| | 2024-10-14 13:34 | 只看该作者
在开发过程中,while(1) 有时被用来暂停程序的执行,以便开发者可以检查系统的状态或调试问题。

使用特权

评论回复
9
kmzuaz| | 2024-10-14 13:56 | 只看该作者
在循环中设置不同任务的执行顺序和时间间隔,以确保系统的稳定运行。

使用特权

评论回复
10
juliestephen| | 2024-10-14 18:35 | 只看该作者
在许多单片机应用程序中,while(1)用作程序的主循环。在这个循环中,程序会不断地检查输入、执行任务和更新输出。

使用特权

评论回复
11
kkzz| | 2024-10-14 22:33 | 只看该作者
单片机常常用于实时控制和监测系统。while(1)循环内部可以包含各种功能模块的调用。

使用特权

评论回复
12
bestwell| | 2024-10-15 09:53 | 只看该作者
进入 while(1) 循环。              

使用特权

评论回复
13
vivilyly| | 2024-10-15 10:14 | 只看该作者
在循环中,可以放置需要一直执行的代码,例如读取传感器数据、处理数据、控制输出等。为了防止程序过快执行,可以在循环中加入延时函数。

使用特权

评论回复
14
hilahope| | 2024-10-15 13:44 | 只看该作者
单片机可能需要不断地检查某些输入

使用特权

评论回复
15
biechedan| | 2024-10-15 18:34 | 只看该作者
while(1)是一个无限循环的结构,它表示一个***执行的循环。

使用特权

评论回复
16
wengh2016| | 2024-10-15 20:14 | 只看该作者
while(1); 表示一个死循环,代码执行至此将不再向下继续执行。这通常用于调试过程中,当需要暂停程序的执行以观察某段代码的运行情况时,可以在该代码段后加入 while(1);来防止后续代码的干扰。当程序检测到运行错误时,可能会抛出错误信息并进入 while(1);以防止执行可能引发更多问题的代码。

使用特权

评论回复
17
vivilyly| | 2024-10-16 09:11 | 只看该作者
在设计循环时,应考虑如何优化资源使用,例如通过合理的延时或休眠策略。

使用特权

评论回复
18
uiint| | 2024-10-16 09:49 | 只看该作者
while(1)是单片机编程中常用的一种结构,用于创建无限循环。它在程序的主控制流程、空闲处理和实时响应等方面发挥着重要作用。

使用特权

评论回复
19
yeates333| | 2024-10-16 11:25 | 只看该作者
while(1)是一个常见的循环结构。其中,while是循环语句的关键字,1表示条件***为真(在 C 语言等编程语言中,非零值表示真)。

使用特权

评论回复
20
albertaabbot| | 2024-10-16 12:42 | 只看该作者
根据条件的结果,单片机将执行不同的操作

使用特权

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

本版积分规则

22

主题

1263

帖子

1

粉丝