久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3540|回復: 18
收起左側

為什么C語言 while(1)每執行一段時間后就重新從main函數最開始的地方重新執行?

  [復制鏈接]
ID:752659 發表于 2021-3-21 09:03 | 顯示全部樓層 |閱讀模式
#include "motor.h"
int S1_flag=0;
float dis;
void main()
{
        EN1=1;
        EN2=1;
        dis=0;
        
        while(1)
        {        
                        if(S1==0)
                        {
                                S1_flag=1;
                        }
                        
                        if(S1_flag==1)
                        {
                                        dis = get_distance();
                                        if(dis<20)
                                        {
                                                        motor_retreat();
                                                        delay(800);
                                                        motor_left();
                                                        delay(100);
                                        }
                                        else
                                        {        
                                                        measure_light();
                                       
                                        }
                }
        }
        
}

回復

使用道具 舉報

ID:814525 發表于 2021-3-21 10:27 | 顯示全部樓層
好好去學一下C語言。while本就是判斷循環指令,()內值為真就執行循環,()內值為假就退出循環

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:57657 發表于 2021-3-21 10:56 | 顯示全部樓層
看門狗問題或其他干擾,導致芯片頻繁復位。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:440728 發表于 2021-3-21 11:19 | 顯示全部樓層
while(1)
{
.....
}
是死循環,一直重復while里面的內容。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:230742 發表于 2021-3-21 22:56 | 顯示全部樓層
為什么C語言 while(1)每執行一段時間后就重新從main函數最開始的地方重新執行?
我按照我的知識給你重新理解一下這個問題。
有while(1){}就一直循環括號里的內容。如果沒有這一句,他也會一直循環main函數里的內容。
單片機內部從有時鐘信號開始就按照系統設計好的方式運行。從main開始運行。運行到程序結束,下一個時鐘到來就又從main開始運行。這是在保證系統程序區都是空白的情況下。不排除由于外界因素的干擾。
所以要穩定還是要寫while(1){}保證程序在可控的范圍內運行。
請參考微機原理與接口類底層的書籍。
回復

使用道具 舉報

ID:894154 發表于 2021-3-22 08:14 | 顯示全部樓層
定時器  中斷 看門狗  都可以從主函數跳出來
回復

使用道具 舉報

ID:592807 發表于 2021-3-22 08:27 | 顯示全部樓層
ANT1987 發表于 2021-3-22 08:14
定時器  中斷 看門狗  都可以從主函數跳出來

也可能是斷電復位
回復

使用道具 舉報

ID:752974 發表于 2021-3-22 08:32 | 顯示全部樓層
板凳說的對,這是個死循環,不會無緣無故跳出來的。
回復

使用道具 舉報

ID:373843 發表于 2021-3-22 08:48 | 顯示全部樓層
肯定是單片機復位了,考慮一下電機的問題,電機驅動的電流
回復

使用道具 舉報

ID:231674 發表于 2021-3-22 12:28 | 顯示全部樓層
單片機復位了 可能是看門狗復位
回復

使用道具 舉報

ID:844772 發表于 2021-3-22 12:53 | 顯示全部樓層
我覺得就是單片機復位了,而且是控制電機的,如果電源沒有分開,就是很容易讓單片機復位的。
回復

使用道具 舉報

ID:687403 發表于 2022-5-11 14:02 | 顯示全部樓層
樓主這個問題解決了嗎?
回復

使用道具 舉報

ID:883242 發表于 2022-5-11 17:39 | 顯示全部樓層
啤酒瓶子老大 發表于 2021-3-21 22:56
為什么C語言 while(1)每執行一段時間后就重新從main函數最開始的地方重新執行?
我按照我的知識給你重新 ...

錯,沒有while(1)的話,main函數執行到最后,必然會死機。
回復

使用道具 舉報

ID:1025765 發表于 2022-5-11 17:53 | 顯示全部樓層
while是先判斷表達式的值是否滿足要求,在執行語句。
回復

使用道具 舉報

ID:824490 發表于 2022-5-11 18:00 | 顯示全部樓層
Hephaestus 發表于 2022-5-11 17:39
錯,沒有while(1)的話,main函數執行到最后,必然會死機。

當PC指針到了最后,不會返回到0?,比如4K的ROM,PC指針到了0X0FFF,再進一步進到0x1000,因為4K最高地址是0xFFF ,所以PC溢出,自動歸0?
回復

使用道具 舉報

ID:883242 發表于 2022-5-11 18:15 | 顯示全部樓層
名字不是重點 發表于 2022-5-11 18:00
當PC指針到了最后,不會返回到0?,比如4K的ROM,PC指針到了0X0FFF,再進一步進到0x1000,因為4K最高地址 ...

別做夢了。
回復

使用道具 舉報

ID:824490 發表于 2022-5-11 23:40 | 顯示全部樓層

如果是這樣,那么就是一個BUG,謹慎表示懷疑。
回復

使用道具 舉報

ID:824490 發表于 2022-5-11 23:59 | 顯示全部樓層
本帖最后由 名字不是重點 于 2022-5-12 00:01 編輯

我的理解是,在main中的加入while(1){},是為了讓PC在可控的范圍內做死循環,如果不加while(1){},則在main()的最后,PC繼續+1,則跑出main()的范圍,此時的PC將不可控,就是所謂的程序跑飛了。但此時MCU并沒有死機,死機與跑飛是兩碼事,拿人來比喻,死機就是人涼了,跑飛只是精神病發作,還可以搶救一下的(有時還會飛回來)。

呼喚大神來指點一下!

回復

使用道具 舉報

ID:824490 發表于 2022-5-12 00:35 | 顯示全部樓層
本帖最后由 名字不是重點 于 2022-5-12 00:38 編輯

#include <reg51.h>
sbit led=P2^1;
void main()
{
  //   while(1)
   {
       led=!led;   //此處斷點。
   }
  }

以上這段代碼測試過,設完斷點后,F5運行,程序還是會在斷點處停下。說明單片機沒死!只是跑飛了。
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕日韩欧美 | 国产精品一二三区 | 午夜在线观看视频 | 国产精品高清一区二区三区 | 日本国产精品视频 | 国产成人精品一区二区 | h视频免费观看 | 日韩视频一区二区在线 | 精品视频一区二区 | 国产成人精品一区二 | 成人精品在线观看 | 欧美亚洲国产精品 | 97视频免费| 国产精品一区在线播放 | 国产二区在线播放 | 日韩精品一 | 91国在线 | 四虎在线观看 | 日韩成人在线免费观看 | 亚洲草草视频 | 国产男女猛烈无遮掩视频免费网站 | 欧美一区二区三区视频 | 久久久青草 | 亚洲综合大片69999 | 中文字幕日韩一区二区 | 中文字幕亚洲一区二区三区 | 天天弄天天操 | 国产这里只有精品 | 一区二区中文字幕 | jizz亚洲人 | 91精品国产777在线观看 | 日韩欧美中文字幕在线观看 | 国产精品1区 | 欧美中文字幕在线观看 | 国产乱人伦| 草久久久| 免费在线播放黄色 | 91在线| 国产成人精品一区二区 | 国产精品视频观看 | 国产高清视频 |