新聞中心

        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 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 上林县| 商南县| 茌平县| 永寿县| 白玉县| 阿拉善盟| 彰化市| 龙江县| 宜黄县| 昌黎县| 射阳县| 普宁市| 曲靖市| 南岸区| 郧西县| 无为县| 南召县| 绩溪县| 白山市| 石家庄市| 晋城| 泸西县| 南雄市| 喀喇沁旗| 平原县| 石家庄市| 南丹县| 内黄县| 安新县| 隆回县| 佛教| 卫辉市| 沙雅县| 黄山市| 博湖县| 牡丹江市| 古蔺县| 镇雄县| 蓬溪县| 沾益县| 皋兰县|