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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

  [復制鏈接]
ID:752659 發(fā)表于 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 發(fā)表于 2021-3-21 10:27 | 顯示全部樓層
好好去學一下C語言。while本就是判斷循環(huán)指令,()內值為真就執(zhí)行循環(huán),()內值為假就退出循環(huán)

評分

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

查看全部評分

回復

使用道具 舉報

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

評分

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

查看全部評分

回復

使用道具 舉報

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

評分

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

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

也可能是斷電復位
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

別做夢了。
回復

使用道具 舉報

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

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

使用道具 舉報

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

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

呼喚大神來指點一下!

回復

使用道具 舉報

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

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

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人69xxx免费视频 | 国产精品久久久久久久久久久久久 | 日日夜夜精品视频 | 免费看91 | 免费精品在线视频 | 久久一二区 | 亚洲福利一区二区 | www.中文字幕 | 五月天婷婷激情 | 伊人精品在线 | 日批免费看 | 在线日韩精品视频 | 欧美成人在线网站 | 日日操夜夜操天天操 | 荷兰欧美一级毛片 | 国产精品一区二区三区在线 | 丝袜美腿一区 | 精品一区二区视频 | 精品欧美一区二区精品久久久 | 久久久久成人精品亚洲国产 | 亚洲 欧美 日韩 在线 | 男女羞羞视频在线观看 | 久久国产婷婷国产香蕉 | 国产视频91在线 | 中文字幕成人av | 亚洲精品一区二区三区 | 亚洲国产成人精品女人久久久 | 久久宗合色 | 在线观看中文字幕 | 三级国产三级在线 | 日本国产一区二区 | 欧美一级片在线观看 | 日本久久久一区二区三区 | 日本高清精品 | 久久综合九九 | 国产在线一区二区三区 | 丁香一区二区 | 欧美日韩国产中文字幕 | 粉嫩一区二区三区性色av | 亚洲精品一区二区三区蜜桃久 | 综合久久色 |