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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3582|回復: 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();
                                       
                                        }
                }
        }
        
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
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 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

6#
ID:894154 發表于 2021-3-22 08:14 | 只看該作者
定時器  中斷 看門狗  都可以從主函數跳出來
回復

使用道具 舉報

7#
ID:592807 發表于 2021-3-22 08:27 | 只看該作者
ANT1987 發表于 2021-3-22 08:14
定時器  中斷 看門狗  都可以從主函數跳出來

也可能是斷電復位
回復

使用道具 舉報

8#
ID:752974 發表于 2021-3-22 08:32 | 只看該作者
板凳說的對,這是個死循環,不會無緣無故跳出來的。
回復

使用道具 舉報

9#
ID:373843 發表于 2021-3-22 08:48 | 只看該作者
肯定是單片機復位了,考慮一下電機的問題,電機驅動的電流
回復

使用道具 舉報

10#
ID:231674 發表于 2021-3-22 12:28 | 只看該作者
單片機復位了 可能是看門狗復位
回復

使用道具 舉報

11#
ID:844772 發表于 2021-3-22 12:53 | 只看該作者
我覺得就是單片機復位了,而且是控制電機的,如果電源沒有分開,就是很容易讓單片機復位的。
回復

使用道具 舉報

12#
ID:687403 發表于 2022-5-11 14:02 | 只看該作者
樓主這個問題解決了嗎?
回復

使用道具 舉報

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

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

使用道具 舉報

14#
ID:1025765 發表于 2022-5-11 17:53 | 只看該作者
while是先判斷表達式的值是否滿足要求,在執行語句。
回復

使用道具 舉報

15#
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?
回復

使用道具 舉報

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

別做夢了。
回復

使用道具 舉報

17#
ID:824490 發表于 2022-5-11 23:40 | 只看該作者

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

使用道具 舉報

18#
ID:824490 發表于 2022-5-11 23:59 | 只看該作者
本帖最后由 名字不是重點 于 2022-5-12 00:01 編輯

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

呼喚大神來指點一下!

回復

使用道具 舉報

19#
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女亚洲一区 | 国产一区二区免费 | 成人午夜激情 | 中文字幕第90页 | 国产精品久久久久久久久久免费看 | 鲁大师一区影视 | 中文字幕av高清 | 日韩在线一区二区 | 国产精品福利在线观看 | 国产免费观看一级国产 | 91精品国产99久久 | 国产精品久久国产精品 | 久久99精品久久久久 | 国产精品久久久久久吹潮 | 黄页网址在线观看 | 国产伦精品一区二区三区精品视频 | 免费看国产精品视频 | 国产午夜精品久久久久免费视高清 | 91网在线观看 | 雨宫琴音一区二区在线 | 超碰免费在| 中文字幕a√ | 久久久久九九九女人毛片 | 中文字幕国产 | 91麻豆精品国产91久久久更新资源速度超快 | 久久久久久www | www.久久久久久久久久久 | 久久久视 | 欧美aa在线 | www.久草.com| 亚洲品质自拍视频网站 | 色视频网站在线观看 | 亚洲免费视频一区 | 亚洲永久精品国产 | 亚洲国产一区二区三区四区 | 中文字幕亚洲区一区二 | 二区三区av | 午夜私人影院 | 亚洲高清成人 | 亚洲人成网亚洲欧洲无码 | 国产91视频播放 |