新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 簡單的啟動代碼(Startup.s)分析

        簡單的啟動代碼(Startup.s)分析

        作者: 時間:2016-11-25 來源:網絡 收藏
        以下啟動代碼是從《ARM嵌入式系統實驗教程(一)》中提取出來的。

         1;啟動文件,初始化C程序的運行環境,然后進入C程序代碼。
        2
        3IMPORT|Image$$RO$$Limit|
        4IMPORT|Image$$RW$$Base|
        5IMPORT|Image$$ZI$$Base|
        6IMPORT|Image$$ZI$$Limit|
        7
        8IMPORTMain;聲明C程序中的Main()函數
        9
        10AREA Start,CODE,READONLY;聲明代碼段Start
        11ENTRY;標識程序入口
        12 CODE32;聲明32位ARM指令
        13
        14Reset LDRSP,=0x40003F00;設置堆棧
        15
        16;初始化C程序的運行環境
        17 LDRR0,=|Image$$RO$$Limit|
        18LDRR1,=|Image$$RW$$Base|
        19LDRR3,=|Image$$ZI$$Base|
        20
        21CMPR0,R1
        22BEQ LOOP1
        23LOOP0 CMPR1,R3
        24LDRCC R2,[R0],#4
        25STRCC R2,[R1],#4
        26BCCLOOP0
        27
        28LOOP1 LDRR1,=|Image$$ZI$$Limit|
        29MOVR2,#0
        30LOOP2 CMPR3,R1
        31STRCC R2,[R3],#4
        32BCCLOOP2
        33
        34B Main;跳轉到C程序代碼Main()函數
        35
        36END

        本文引用地址:http://www.104case.com/article/201611/321098.htm從ADS1.2的幫助文檔可以看出以下幾個symbol的定義應該是:
        |Image$$RO$$Base|
        表示RO輸出段運行時起始地址,也可以說是程序代碼存放的起始地址,由-ro-base這個參數指定;
        |Image$$RO$$Limit|
        表示RO輸出 段運行時存儲區域界限,其值可通過|Image$$RO$$Base|+Codesizes+RO Data sizes+4計算得出;
        |Image$$RW$$Base|
        表示RW輸出段運行時起始地址,記得是運行時的地址,而不一定是加載時的存放地址,因為RW輸出段在加載時可能是在ROM中并緊跟著RO輸出段存放的,當程序運行時才移動(在有些書中說是移動,個人覺得應該只是復制,希望大家能幫我解釋一下,謝謝!) 到RAM起始地址為|Image$$RW$$Base|的區域,由-rw-base這個參數指定;未指定的話,默認緊跟RO輸 出段,那么|Image$$RW$$Base|=|Image$$RO$$Limit|;
        |Image$$RW$$Limit|
        表示RW輸出 段運行時存儲區域界限,其值可通過|Image$$RW$$Base|+RW Data sizes+4計算得出;
        |Image$$ZI$$Base|
        表示ZI輸出段運行時起始地址,它是運行時在RAM中生成的,緊跟著RW輸出段存放,其 值和|Image$$RW$$Limit| 一樣;
        |Image$$ZI$$Limit|
        表示ZI輸出 段運行時存儲區域界限,其值可通過|Image$$ZI$$Base|+ZI Data sizes+4計算得出。


        關鍵詞: 啟動代碼Startup

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 常德市| 伊宁县| 尚志市| 醴陵市| 林西县| 晋宁县| 开化县| 夹江县| 习水县| 银川市| 博客| 陈巴尔虎旗| 开化县| 云浮市| 凌云县| 和静县| 日喀则市| 铜梁县| 荆门市| 定南县| 射阳县| 玉环县| 东海县| 嘉峪关市| 汤阴县| 台中市| 涟源市| 河北区| 蓬安县| 承德县| 平远县| 麦盖提县| 凤阳县| 宣汉县| 西宁市| 盐山县| 潞城市| 固阳县| 呼伦贝尔市| 高雄市| 南投市|