找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2365|回复: 21
打印 上一主题 下一主题
收起左侧

C语言mail里多个while(1)循环 程序分析

  [复制链接]
跳转到指定楼层
楼主
各位大神,看到一个程序,在主函数mail里有多个while(1)循环,对吗?这是什么操作啊,请有知道的大神科普科普!!



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2022-3-12 23:13 | 只看该作者
我也不晓得,前几天看STM32的书,里头就是这个样子的
回复

使用道具 举报

板凳
ID:311903 发表于 2022-3-13 09:10 | 只看该作者
while(1)
{
     if(condition)
          break;
}
....
while(1)
{
     if(condition)
          break;
}
....
while(1)
{
  ...
}


这种吧
回复

使用道具 举报

地板
ID:142059 发表于 2022-3-13 09:18 来自手机 | 只看该作者
Y_G_G 发表于 2022-3-12 23:13
我也不晓得,前几天看STM32的书,里头就是这个样子的

等待下一步,应该有break的条件的
回复

使用道具 举报

5#
ID:476652 发表于 2022-3-13 10:37 | 只看该作者
咋回事啊,这也没有懂得的大神难吗?
那只能恳请大神的师傅们出来给大家科普了,
一直说main里只能有1个while(1)循环,这回好家伙,冒出一大堆while(1)循环来,颠覆认知啊!
回复

使用道具 举报

6#
ID:401564 发表于 2022-3-13 15:42 | 只看该作者
温柔的郎 发表于 2022-3-13 10:37
咋回事啊,这也没有懂得的大神难吗?
那只能恳请大神的师傅们出来给大家科普了,
一直说main里只能有1个w ...

找到了,这是嵌入式里面的多任务,跟8051的单片机还是有差别的
估计是跑系统的时候用的吧
我也没有认真看,还没有学到,知道怎么回事就行
没有break条件的,想象中应该是多个任务可以一直执行,就好比这个while(1)一直在检测,还有另外一条main的程序本身还在执行
并不是C的一条一条诗句的执行的
回复

使用道具 举报

7#
ID:401564 发表于 2022-3-13 15:43 | 只看该作者
https://www.cnblogs.com/ansersion/p/4328800.html
你上这看一下就知道了
回复

使用道具 举报

8#
ID:290373 发表于 2022-3-13 15:50 | 只看该作者
板凳和地板说的应该没问题。
这个像是8266配置相关的内容,逻辑应该是如果某一个AT操作没有完成,就重复这个操作直到完成,当完成该操作后break一下,跳出死循环,执行下一步。

至于操作系统内一般能接触到的while(1)是存在于任务函数(暂时这样称呼它)中的。
由于在操作系统中任务是由操作系统划分时间片进行执行的,故不需要考虑其他问题,若用户希望任务一直运行下去,就在任务函数中写上while(1),交由操作系统执行。
回复

使用道具 举报

9#
ID:544776 发表于 2022-3-13 16:17 | 只看该作者
可以去看一下rtos的代码,每个任务都写死的
回复

使用道具 举报

10#
ID:139866 发表于 2022-3-16 16:56 | 只看该作者
Y_G_G 发表于 2022-3-13 15:43
https://www.cnblogs.com/ansersion/p/4328800.html
你上这看一下就知道了

这个不是多任务,上面并没有配置的函数,这就是简简单单一个51程序,楼主折叠了while内的部分,这个程序看起来像是在AT模式配置ESP8266,while的作用是等待8266应答,收到应答才跳出进入下一个while,最后一个或者倒数第二个while才是平常运行的循环
回复

使用道具 举报

11#
ID:962286 发表于 2022-3-16 21:07 | 只看该作者
任何单片机main里边都可以有多个while(1)。有些可以由相应条件而break,有些则用不break,比如程序发生一些错误,检测到相应的标志位,则打印相关错误,同时直接一个while(1)不出来了,也就不再继续执行任务,这种情况多发生在调试程序,方便知道哪里错了。
回复

使用道具 举报

12#
ID:844772 发表于 2022-3-17 09:18 | 只看该作者
天ノ忆 发表于 2022-3-16 16:56
这个不是多任务,上面并没有配置的函数,这就是简简单单一个51程序,楼主折叠了while内的部分,这个程序 ...

赞同这个回复。ESP8266的这几个AT指令好麻烦,下个执行失败会要求从头来,所以看起来就是while(1)的嵌套了,就是在反复的复位-连接-建立服务器,你仔细找一下,都搞好了会有直接全部跳出的语句。
回复

使用道具 举报

13#
ID:160500 发表于 2022-3-17 11:45 | 只看该作者
你这发个半残的程序叫人来给你分析问题
回复

使用道具 举报

14#
ID:476652 发表于 2022-3-17 15:00 | 只看该作者
上次发帖时,为了让大家看到程序的全貌,所以折叠了,但有影响到大家的判断了,在这,把程序再详细展现出来







回复

使用道具 举报

15#
ID:476652 发表于 2022-3-17 15:17 | 只看该作者
       感谢各位大神的各种辨析和讨论,我按7楼大神的引导,进入到另一个殿堂看了看,才发现这个多while(1)程序,其实是一个比51高好多维度的世界,是1个带操作系统的程序。
      按我目前的认知水平,肯定理解不了了,不过扩大自己的见识,是很有价值的,
回复

使用道具 举报

16#
ID:446406 发表于 2022-3-17 15:21 | 只看该作者
前面的while()都是等待,收到应答后自动退出了。程序没有什么大问题!
回复

使用道具 举报

17#
ID:514901 发表于 2022-3-18 09:14 | 只看该作者
16楼正解,扯不上什么操作系统
回复

使用道具 举报

18#
ID:956872 发表于 2022-3-18 21:16 | 只看该作者
这就是51单片机用AT指令操作8266联网等待反馈结果吧,如果成功执行,跳入下一下while,错误的话,串口打印失败,一直错误一直在该步死循环,有开门狗就会自动复位了。
回复

使用道具 举报

19#
ID:1007106 发表于 2022-3-19 20:04 | 只看该作者
由于在操作系统中任务是由操作系统划分时间片进行执行的,故不需要考虑其他问题,若用户希望任务一直运行下去,就在任务函数中写上while(1),交由操作系统执行。
回复

使用道具 举报

20#
ID:712493 发表于 2022-5-8 09:29 | 只看该作者
1517347243 发表于 2022-3-19 20:04
由于在操作系统中任务是由操作系统划分时间片进行执行的,故不需要考虑其他问题,若用户希望任务一直运行下 ...

这里的程序跟操作系统没关系吧
回复

使用道具 举报

21#
ID:1026496 发表于 2022-5-15 22:49 | 只看该作者
建议把代码全部以文件的方式分享出来。
回复

使用道具 举报

22#
ID:1026496 发表于 2022-5-15 23:09 | 只看该作者
温柔的郎 发表于 2022-3-17 15:00
上次发帖时,为了让大家看到程序的全貌,所以折叠了,但有影响到大家的判断了,在这,把程序再详细展现出来 ...

一个while(1)可以看着一个状态可以用一个switch case 来替换
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表