温柔的郎 发表于 2022-3-17 15:00 一个while(1)可以看着一个状态可以用一个switch case 来替换 |
建议把代码全部以文件的方式分享出来。 |
1517347243 发表于 2022-3-19 20:04 这里的程序跟操作系统没关系吧 |
由于在操作系统中任务是由操作系统划分时间片进行执行的,故不需要考虑其他问题,若用户希望任务一直运行下去,就在任务函数中写上while(1),交由操作系统执行。 |
这就是51单片机用AT指令操作8266联网等待反馈结果吧,如果成功执行,跳入下一下while,错误的话,串口打印失败,一直错误一直在该步死循环,有开门狗就会自动复位了。 |
16楼正解,扯不上什么操作系统 |
前面的while()都是等待,收到应答后自动退出了。程序没有什么大问题! |
感谢各位大神的各种辨析和讨论,我按7楼大神的引导,进入到另一个殿堂看了看,才发现这个多while(1)程序,其实是一个比51高好多维度的世界,是1个带操作系统的程序。 按我目前的认知水平,肯定理解不了了,不过扩大自己的见识,是很有价值的, |
你这发个半残的程序叫人来给你分析问题 |
天ノ忆 发表于 2022-3-16 16:56 赞同这个回复。ESP8266的这几个AT指令好麻烦,下个执行失败会要求从头来,所以看起来就是while(1)的嵌套了,就是在反复的复位-连接-建立服务器,你仔细找一下,都搞好了会有直接全部跳出的语句。 |
任何单片机main里边都可以有多个while(1)。有些可以由相应条件而break,有些则用不break,比如程序发生一些错误,检测到相应的标志位,则打印相关错误,同时直接一个while(1)不出来了,也就不再继续执行任务,这种情况多发生在调试程序,方便知道哪里错了。 |
Y_G_G 发表于 2022-3-13 15:43 这个不是多任务,上面并没有配置的函数,这就是简简单单一个51程序,楼主折叠了while内的部分,这个程序看起来像是在AT模式配置ESP8266,while的作用是等待8266应答,收到应答才跳出进入下一个while,最后一个或者倒数第二个while才是平常运行的循环 |
可以去看一下rtos的代码,每个任务都写死的 |
板凳和地板说的应该没问题。 这个像是8266配置相关的内容,逻辑应该是如果某一个AT操作没有完成,就重复这个操作直到完成,当完成该操作后break一下,跳出死循环,执行下一步。 至于操作系统内一般能接触到的while(1)是存在于任务函数(暂时这样称呼它)中的。 由于在操作系统中任务是由操作系统划分时间片进行执行的,故不需要考虑其他问题,若用户希望任务一直运行下去,就在任务函数中写上while(1),交由操作系统执行。 |
温柔的郎 发表于 2022-3-13 10:37 找到了,这是嵌入式里面的多任务,跟8051的单片机还是有差别的 估计是跑系统的时候用的吧 我也没有认真看,还没有学到,知道怎么回事就行 没有break条件的,想象中应该是多个任务可以一直执行,就好比这个while(1)一直在检测,还有另外一条main的程序本身还在执行 并不是C的一条一条诗句的执行的 |
咋回事啊,这也没有懂得的大神难吗? 那只能恳请大神的师傅们出来给大家科普了, 一直说main里只能有1个while(1)循环,这回好家伙,冒出一大堆while(1)循环来,颠覆认知啊! |
Y_G_G 发表于 2022-3-12 23:13 等待下一步,应该有break的条件的 |
while(1) { if(condition) break; } .... while(1) { if(condition) break; } .... while(1) { ... } 这种吧 |
我也不晓得,前几天看STM32的书,里头就是这个样子的 |