找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4293|回復(fù): 21
收起左側(cè)

C語言mail里多個while(1)循環(huán) 程序分析

  [復(fù)制鏈接]
ID:476652 發(fā)表于 2022-3-12 18:29 | 顯示全部樓層 |閱讀模式
各位大神,看到一個程序,在主函數(shù)mail里有多個while(1)循環(huán),對嗎?這是什么操作啊,請有知道的大神科普科普!
51hei截圖_20220312182614.png
51hei截圖_20220312182638.png

回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2022-3-12 23:13 | 顯示全部樓層
我也不曉得,前幾天看STM32的書,里頭就是這個樣子的
回復(fù)

使用道具 舉報(bào)

ID:311903 發(fā)表于 2022-3-13 09:10 | 顯示全部樓層
while(1)
{
     if(condition)
          break;
}
....
while(1)
{
     if(condition)
          break;
}
....
while(1)
{
  ...
}


這種吧
回復(fù)

使用道具 舉報(bào)

ID:142059 發(fā)表于 2022-3-13 09:18 來自觸屏版 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-3-12 23:13
我也不曉得,前幾天看STM32的書,里頭就是這個樣子的

等待下一步,應(yīng)該有break的條件的
回復(fù)

使用道具 舉報(bào)

ID:476652 發(fā)表于 2022-3-13 10:37 | 顯示全部樓層
咋回事啊,這也沒有懂得的大神難嗎?
那只能懇請大神的師傅們出來給大家科普了,
一直說main里只能有1個while(1)循環(huán),這回好家伙,冒出一大堆while(1)循環(huán)來,顛覆認(rèn)知。
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2022-3-13 15:42 | 顯示全部樓層
溫柔的郎 發(fā)表于 2022-3-13 10:37
咋回事啊,這也沒有懂得的大神難嗎?
那只能懇請大神的師傅們出來給大家科普了,
一直說main里只能有1個w ...

找到了,這是嵌入式里面的多任務(wù),跟8051的單片機(jī)還是有差別的
估計(jì)是跑系統(tǒng)的時候用的吧
我也沒有認(rèn)真看,還沒有學(xué)到,知道怎么回事就行
沒有break條件的,想象中應(yīng)該是多個任務(wù)可以一直執(zhí)行,就好比這個while(1)一直在檢測,還有另外一條main的程序本身還在執(zhí)行
并不是C的一條一條詩句的執(zhí)行的
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2022-3-13 15:43 | 顯示全部樓層
https://www.cnblogs.com/ansersion/p/4328800.html
你上這看一下就知道了
回復(fù)

使用道具 舉報(bào)

ID:290373 發(fā)表于 2022-3-13 15:50 | 顯示全部樓層
板凳和地板說的應(yīng)該沒問題。
這個像是8266配置相關(guān)的內(nèi)容,邏輯應(yīng)該是如果某一個AT操作沒有完成,就重復(fù)這個操作直到完成,當(dāng)完成該操作后break一下,跳出死循環(huán),執(zhí)行下一步。

至于操作系統(tǒng)內(nèi)一般能接觸到的while(1)是存在于任務(wù)函數(shù)(暫時這樣稱呼它)中的。
由于在操作系統(tǒng)中任務(wù)是由操作系統(tǒng)劃分時間片進(jìn)行執(zhí)行的,故不需要考慮其他問題,若用戶希望任務(wù)一直運(yùn)行下去,就在任務(wù)函數(shù)中寫上while(1),交由操作系統(tǒng)執(zhí)行。
回復(fù)

使用道具 舉報(bào)

ID:544776 發(fā)表于 2022-3-13 16:17 | 顯示全部樓層
可以去看一下rtos的代碼,每個任務(wù)都寫死的
回復(fù)

使用道具 舉報(bào)

ID:139866 發(fā)表于 2022-3-16 16:56 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-3-13 15:43
https://www.cnblogs.com/ansersion/p/4328800.html
你上這看一下就知道了

這個不是多任務(wù),上面并沒有配置的函數(shù),這就是簡簡單單一個51程序,樓主折疊了while內(nèi)的部分,這個程序看起來像是在AT模式配置ESP8266,while的作用是等待8266應(yīng)答,收到應(yīng)答才跳出進(jìn)入下一個while,最后一個或者倒數(shù)第二個while才是平常運(yùn)行的循環(huán)
回復(fù)

使用道具 舉報(bào)

ID:962286 發(fā)表于 2022-3-16 21:07 | 顯示全部樓層
任何單片機(jī)main里邊都可以有多個while(1)。有些可以由相應(yīng)條件而break,有些則用不break,比如程序發(fā)生一些錯誤,檢測到相應(yīng)的標(biāo)志位,則打印相關(guān)錯誤,同時直接一個while(1)不出來了,也就不再繼續(xù)執(zhí)行任務(wù),這種情況多發(fā)生在調(diào)試程序,方便知道哪里錯了。
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2022-3-17 09:18 | 顯示全部樓層
天ノ憶 發(fā)表于 2022-3-16 16:56
這個不是多任務(wù),上面并沒有配置的函數(shù),這就是簡簡單單一個51程序,樓主折疊了while內(nèi)的部分,這個程序 ...

贊同這個回復(fù)。ESP8266的這幾個AT指令好麻煩,下個執(zhí)行失敗會要求從頭來,所以看起來就是while(1)的嵌套了,就是在反復(fù)的復(fù)位-連接-建立服務(wù)器,你仔細(xì)找一下,都搞好了會有直接全部跳出的語句。
回復(fù)

使用道具 舉報(bào)

ID:160500 發(fā)表于 2022-3-17 11:45 | 顯示全部樓層
你這發(fā)個半殘的程序叫人來給你分析問題
回復(fù)

使用道具 舉報(bào)

ID:476652 發(fā)表于 2022-3-17 15:00 | 顯示全部樓層
上次發(fā)帖時,為了讓大家看到程序的全貌,所以折疊了,但有影響到大家的判斷了,在這,把程序再詳細(xì)展現(xiàn)出來

1.png
2.png
3.png
4.png
5.png

回復(fù)

使用道具 舉報(bào)

ID:476652 發(fā)表于 2022-3-17 15:17 | 顯示全部樓層
       感謝各位大神的各種辨析和討論,我按7樓大神的引導(dǎo),進(jìn)入到另一個殿堂看了看,才發(fā)現(xiàn)這個多while(1)程序,其實(shí)是一個比51高好多維度的世界,是1個帶操作系統(tǒng)的程序。
      按我目前的認(rèn)知水平,肯定理解不了了,不過擴(kuò)大自己的見識,是很有價(jià)值的,
回復(fù)

使用道具 舉報(bào)

ID:446406 發(fā)表于 2022-3-17 15:21 | 顯示全部樓層
前面的while()都是等待,收到應(yīng)答后自動退出了。程序沒有什么大問題!
回復(fù)

使用道具 舉報(bào)

ID:514901 發(fā)表于 2022-3-18 09:14 | 顯示全部樓層
16樓正解,扯不上什么操作系統(tǒng)
回復(fù)

使用道具 舉報(bào)

ID:956872 發(fā)表于 2022-3-18 21:16 | 顯示全部樓層
這就是51單片機(jī)用AT指令操作8266聯(lián)網(wǎng)等待反饋結(jié)果吧,如果成功執(zhí)行,跳入下一下while,錯誤的話,串口打印失敗,一直錯誤一直在該步死循環(huán),有開門狗就會自動復(fù)位了。
回復(fù)

使用道具 舉報(bào)

ID:1007106 發(fā)表于 2022-3-19 20:04 | 顯示全部樓層
由于在操作系統(tǒng)中任務(wù)是由操作系統(tǒng)劃分時間片進(jìn)行執(zhí)行的,故不需要考慮其他問題,若用戶希望任務(wù)一直運(yùn)行下去,就在任務(wù)函數(shù)中寫上while(1),交由操作系統(tǒng)執(zhí)行。
回復(fù)

使用道具 舉報(bào)

ID:712493 發(fā)表于 2022-5-8 09:29 | 顯示全部樓層
1517347243 發(fā)表于 2022-3-19 20:04
由于在操作系統(tǒng)中任務(wù)是由操作系統(tǒng)劃分時間片進(jìn)行執(zhí)行的,故不需要考慮其他問題,若用戶希望任務(wù)一直運(yùn)行下 ...

這里的程序跟操作系統(tǒng)沒關(guān)系吧
回復(fù)

使用道具 舉報(bào)

ID:1026496 發(fā)表于 2022-5-15 22:49 | 顯示全部樓層
建議把代碼全部以文件的方式分享出來。
回復(fù)

使用道具 舉報(bào)

ID:1026496 發(fā)表于 2022-5-15 23:09 | 顯示全部樓層
溫柔的郎 發(fā)表于 2022-3-17 15:00
上次發(fā)帖時,為了讓大家看到程序的全貌,所以折疊了,但有影響到大家的判斷了,在這,把程序再詳細(xì)展現(xiàn)出來 ...

一個while(1)可以看著一個狀態(tài)可以用一個switch case 來替換
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表