新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機程序執行流程詳細分析

        51單片機程序執行流程詳細分析

        作者: 時間:2016-11-29 來源:網絡 收藏

        這里是一個循環,根據DJNZ指令的功能:每執行一次DJNZ RO, IDATALOOP就將R0的值減1,若R0的值不為0則就跳到IDATALOOP地址去。很顯然這是一個循環,那么RO的值是多少呢,在以下窗口顯示:

        可見r0的初值為0x7f,這里將要循環0x7f(128)次,具體在這里r0值的含義可查看一下子的。那么在這個循環之后程序又將去哪里呢?跳過這個循環后程序運行的地方如下:

        再單步運行一次:

        根據Disassembly的內容,此條語句執行了就又要回到main函數中去了,執行一下試試:

        是的!

        所以,在51單片機中,程序的執行流程就是會不斷( 以r0的值作為延遲條件, 具體含義可繼續探索 )的進入main函數中執行main函數中的代碼。

        為什么我們在linux等上面運行不帶死循環的C語言代碼后程序就會自行終止呢?這是不同的操作流程:

        (1) C51單片機不帶OS(操作系統),代碼的執行形勢在此看來就由STARTUP.A51來安排了,沒有一個更大的程序來管理怎么調用main函數。

        (2) 像Linux這類的平臺是帶了OS的,運行一個C語言程序對linux來說就是一個任務,除了運行C語言程序這個任務外還有其它的任務。當運行一個C語言程序完畢時,此次的任務也算是完成了。如在linux shell界面運行一個文件名為“hello.c”功能為輸出“hello world!”的C語言程序,過程如下:

        編譯:gcc hello.c –o hello

        運行:./hello

        在運行hello可執行文件時,可以當做是shell調用了hello這個可執行程序。在hello運行完畢后,將返回值等返回給shell界面。整個C語言文件的生死全有linux shell程序管理。

        歸其原因,還是代碼規定的機制不一樣吧。


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 英吉沙县| 龙海市| 会东县| 阿尔山市| 抚宁县| 屏边| 潜江市| 西贡区| 长汀县| 昌都县| 彰武县| 竹山县| 长阳| 交口县| 慈溪市| 都江堰市| 遂宁市| 桂平市| 望都县| 秦皇岛市| 武义县| 南宫市| 木里| 定边县| 临湘市| 伊春市| 柞水县| 景泰县| 玉林市| 鲜城| 四会市| 东乌珠穆沁旗| 夏津县| 凉山| 龙岩市| 沈丘县| 汉沽区| 泰兴市| 宁远县| 区。| 岚皋县|