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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機C語言中while(1)的問題

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年06月09日   【字體:

  單片機C語言的主程序,通常要用一個while(1)語句來讓程序進入一個無限循環,目的是為了讓程序一直保持在我們需要運行的情況下。
  雖然這種做法毋庸置疑,在網上還是有不少朋友有疑問,如果程序不加while(1)會出現什么情況,對于這種好學精神,還是值得贊揚的,做學問就需要有追根問底的精神。
  首先,大家要理解一件事情,我們編寫的C語言程序,最終下載到單片機當中去,在我們單片機的程序存儲空間FLASH當中存儲的全部是2進制數字代碼。比如0x00,0x01,一直到0xff。而我們編寫的C代碼,依靠的是編譯軟件,比如keil軟件,首先將C語言編譯成為匯編語言,最終匯編語言變成2進制代碼,也就是我們的HEX文件當中的數據,下載到單片機當中去。
  因此,查找這個問題,首先從源頭來找,首先是C語言,然后,我們再看一下軟件給我們編譯的匯編語言是什么樣子。用KEIL軟件編寫一個程序,然后simulator的方式進行仿真,進入仿真環境后,在View窗口下有個Disassembly window,打開,里邊就會出現剛才我們的C語言所對應的匯編語言了(KEIL軟件會自動將C編譯成匯編),找到里邊的主函數,找到你最后一行的程序所對應的匯編,找到后,會發現在最后一行程序結束后,KEIL這個軟件還會自動給加入幾行匯編代碼,這幾行代碼就是(1)MOV R0, #0x7F;(2)CLR A; (3)MOV @R0, A; (4) DJNZ R0, (3); (5)MOV SP, #0x0C;(6) LJMP main;這幾條語句,前4條,是將我們單片機的內存的前128個地址清零,第5條,是定義堆棧,第6條,是將程序重新跳轉到main函數的首行進行執行。
  從這里我們可以看出,最終下載到單片機運行的程序包含兩部分,一部分是我們編寫的程序代碼,另外一部分是編譯器自動生成的代碼,因此,用KEIL軟件編寫的程序在沒有while(1)的情況下運行到最后一行,會自動跳轉到main函數第一行運行。
  本著嚴謹的態度,筆者又查找PIC單片機的編譯開發環境MAPLAB IDE,找到其中的匯編程序,在Disassembly window匯編程序中沒有發現跳轉到主函數的語句或者是復位語句。筆者不甘心,于是繼續查找,打開了Promgram Memory,這也是最終下載到單片機當中的程序,通過仔細查看筆者在其后邊,發現了在main函數的最后,有一條“reset”語句,這是一條PIC單片機的復位語句,也就是說PIC單片機在進行程序編譯的過程中,如果沒有while(1)語句,最后則會直接執行復位,這MAPLAB隱藏的可夠深的。
  我在論壇上看到一個發帖者提出他下載進AVR單片機的沒有while(1)的程序,但是單片機卻沒有復位,這點我沒有再去驗證,因為我們的程序通常都是要加while(1)這個循環,因此呢,問題到了這里,單片機程序沒有while(1)會出現什么情況,這一點已經不重要了。但是有一點已經可以確認了,一部分單片機在沒有while(1)的情況下,運行到最后一行出現的情況受到編譯開發環境的影響。
  當然了,一個嚴謹的開發環境,就應該像KEIL和MAPLAB這樣,在程序員編譯程序可能出現漏洞的地方給與防護,避免程序跑飛程序員無法查找程序問題。
 

關閉窗口

相關文章

主站蜘蛛池模板: 一级黄色片网址 | 久久不卡日韩美女 | 中文字幕一区二区三区不卡 | 欧美6一10sex性hd | 日韩精品欧美精品 | 91九色porny首页最多播放 | 羞羞的视频免费观看 | 日韩手机在线看片 | 超碰91在线 | 51ⅴ精品国产91久久久久久 | www.蜜桃av | 毛片的网址 | 亚洲一区二区在线免费观看 | 成人毛片网站 | 亚洲一区欧美一区 | 亚洲人成在线播放 | 999久久久免费精品国产 | 午夜精品久久久久久不卡欧美一级 | 国产精品国产成人国产三级 | 久久久久无码国产精品一区 | 久久伦理电影 | 99久久国产综合精品麻豆 | 久久精品国产久精国产 | www.国产| 伊人伊人 | 国产成人精品久久二区二区91 | tube国产| 日韩成人在线看 | 亚洲天堂免费 | 国产精品免费一区二区三区四区 | av天天操 | 欧美国产一区二区三区 | 免费看的黄网站 | 7777在线视频 | 日本91av视频 | 国产精品久久国产精品99 gif | www国产成人免费观看视频 | 国产一区www| 国产精品综合久久 | 精品欧美一区免费观看α√ | 久久久久久精 |