while(1);的作用

來源:互聯網
上載者:User
單片機中while(1)有兩種用途,while(1);意義:這是一個死迴圈,代碼不再向下執行。用途:1. 一般在調試代碼時,為了檢測一部分代碼是否OK,防止後面的代碼幹擾執行結果,會在觀測點加上while(1);2. 有些代碼檢測到運行錯誤時,會拋出錯誤(列印、設定錯誤碼),然後進入while(1);3.  機器需要複位時,停止喂看門狗,進入while(1); 迫使看門狗逾時,產生硬體複位while( 1 ) { 代碼 }意義:這裡將會重複執行{}中的代碼用途:1.  單片機在不使用作業系統時,主程式一般都使用這種架構2. 作業系統中的進程,執行任務時,有些也會使用這種架構3. {}中的代碼不停地檢測某個條件,當條件符合時,跳出該迴圈,繼續向下執行我們在單片機中使用while(1),大部分還是為了防止程式跑飛,因為很多時候執行完某段程式後單片機的程式指標PC(就是程式指標)並不會停止,仍然會繼續從ROM中讀取指令並執行,這樣一來可能會出現程式跑飛的情況,進而出現不確定的結果,我們加個while(1)就能讓程式在執行完後在原地迴圈,相當於停在原地,防止跑飛。
 
原則上來講,如果程式中沒有加結尾的話,程式計數器會繼續累加,從而執行正常程式後面的ROM空間裡面的指令,不過一般這個指令都是0XFF,這就要看這條指令的含義了,如果是空的話就會一直執行到最後,直到程式計數器溢出,只是不知道程式計數器發生溢出是一個什麼狀態,有可能回到複位狀態值,也有可能直接就讓單片機死在這裡不工作,這個就要看單片機的具體設計了。
 
在主程式裡應當有
while(1)
{
  ..;
}
否則單片機的程式會繼續按地址運行下去,到0ffffh後-》00000h。
如果不加while(1)語句,單片機依然正常運行,就是後面的地址裡恰好有什麼東西使得程式形成死迴圈,沒有飛跑,那也是湊巧。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.