新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM7嵌入式系統中啟動程序的實現

        ARM7嵌入式系統中啟動程序的實現

        作者: 時間:2013-12-05 來源:網絡 收藏

        中生成的匹配表中包含地址映射,存儲頁大小(1M,64K,或4K)以及是否允許存取等信息。
        例如:目標板上的16兆DRAM的物理地址區間為0xc000,0000~0xc07f,ffff和0xc100,0000~0xc17f,ffff;16兆ROM的虛擬地址區間為:0x0000,0000~0x00ff,ffff。匹配表配置如下:

        0x0000,00000xc000,0000r/w
        0x0010,00000xc010,0000…
        0x0020,00000xc020,0000…
        …………
        0x0070,00000xc070,0000r/w
        0x0080,00000xc100,0000…
        …………
        0x00f0,00000xc170,0000…
        0x0100,00000x0000,0000ro
        0x0110,00000x0010,0000
        0x01f0,00000x00f0,0000
        0x0200,00000x0200,0000inaccessable
        ……………
        可以看到左邊是連續的虛擬地址空間,右邊是不連續的物理地址空間,而且將DRAM映射到了0地址區間。MMU通過虛擬地址和頁面表位置信息,按照轉換邏輯獲得對應物理地址,輸出到地址總線上。
        應注意到的是使能MMU后,程序繼續運行,但是對于程序員來說程序計數器的指針已經改變,指向了ROM所對應的虛擬地址。
        ⑵目標文件的分布裝載分析
        首先創建一個文本文件,稱為分布裝載描述文件。它為應用程序的各部分指定裝載區間和執行區間。
        舉例如下:
        FLASH0x010000000x011fffff;2MFLASH
        {
        FLASH0x01000000
        {
        boot.o(BOOT,+First)
        *(+RO)
        }
        DRAM0x00000000

        {
        vector.0(VECTOR,+First)
        int_handler.o(+RO)
        *(+RW,+ZI)
        }
        }
        在arm鏈接器的命令行里加入”-scovdescription-file-scf”或”-scatterdescription-file”,編譯鏈接后,將產生一個分布裝載文件。
        鏈接器同時產生一組符號,給出每個分布描述文件中命名的區間的長度,裝載地址和執行地址。由于鏈接器和C庫都沒有將代碼從它的裝載區間拷貝到執行區間,或創建一個零初始化區域的功能,所以要由應用程序員利用這組符號產生的信息完成這項工作,這是在呼叫C程序之前必須完成的,舉例如下:
        LDRr0,=|Load$$DRAM$$Base|
        LDRr1,=|Image$$DRAM$$Base|
        CMPr0,r1檢查裝載地址和執行地址是否相同
        BEQdo_zi_init相同,則不拷貝該區間,初始化零數據區
        MOVr2,r1;不相同,將裝載區拷貝到執行區
        LDRr4,=|Image$$DRAM$$length|
        ADDr2,r2,r4
        BLcopy
        do_zi_init
        LDRr1,=|Image$$DRAM$$ZI$$Base|
        MOVr2,r1
        LDRr4,=|Image$$DRAM$$ZI$$length|
        ADDr2,r2,r4
        MOVr3,#0
        BLzi_init調用零初始化子程序

        結語:
        本文介紹的已經在以CirrusLogic公司的EP7211和Ateml公司的AT91M40400開發的系統上運行并測試通過。今后可以在這一基礎上添加串行通信模塊和FLASH操作模塊,開發系統監控程序,從而實現應用程序的在線升級。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 鄄城县| 沁源县| 安溪县| 洞头县| 三原县| 佳木斯市| 句容市| 香港 | 成安县| 越西县| 常德市| 龙州县| 鄂州市| 江城| 原阳县| 邢台县| 兴义市| 穆棱市| 三穗县| 铜山县| 梓潼县| 富锦市| 阳西县| 温宿县| 土默特左旗| 唐海县| 沽源县| 高碑店市| 黎川县| 新泰市| 乐业县| 宁强县| 凌云县| 若尔盖县| 淳化县| 南阳市| 平阴县| 安新县| 左贡县| 兴业县| 盐山县|