<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM7嵌入式系統(tǒng)中啟動程序的實現(xiàn)

          ARM7嵌入式系統(tǒng)中啟動程序的實現(xiàn)

          作者: 時間:2013-12-05 來源:網(wǎng)絡 收藏

          中生成的匹配表中包含地址映射,存儲頁大小(1M,64K,或4K)以及是否允許存取等信息。
          例如:目標板上的16兆DRAM的物理地址區(qū)間為0xc000,0000~0xc07f,ffff和0xc100,0000~0xc17f,ffff;16兆ROM的虛擬地址區(qū)間為: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
          ……………
          可以看到左邊是連續(xù)的虛擬地址空間,右邊是不連續(xù)的物理地址空間,而且將DRAM映射到了0地址區(qū)間。MMU通過虛擬地址和頁面表位置信息,按照轉換邏輯獲得對應物理地址,輸出到地址總線上。
          應注意到的是使能MMU后,程序繼續(xù)運行,但是對于程序員來說程序計數(shù)器的指針已經(jīng)改變,指向了ROM所對應的虛擬地址。
          ⑵目標文件的分布裝載分析
          首先創(chuàng)建一個文本文件,稱為分布裝載描述文件。它為應用程序的各部分指定裝載區(qū)間和執(zhí)行區(qū)間。
          舉例如下:
          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”,編譯鏈接后,將產(chǎn)生一個分布裝載文件。
          鏈接器同時產(chǎn)生一組符號,給出每個分布描述文件中命名的區(qū)間的長度,裝載地址和執(zhí)行地址。由于鏈接器和C庫都沒有將代碼從它的裝載區(qū)間拷貝到執(zhí)行區(qū)間,或創(chuàng)建一個零初始化區(qū)域的功能,所以要由應用程序員利用這組符號產(chǎn)生的信息完成這項工作,這是在呼叫C程序之前必須完成的,舉例如下:
          LDRr0,=|Load$$DRAM$$Base|
          LDRr1,=|Image$$DRAM$$Base|
          CMPr0,r1檢查裝載地址和執(zhí)行地址是否相同
          BEQdo_zi_init相同,則不拷貝該區(qū)間,初始化零數(shù)據(jù)區(qū)
          MOVr2,r1;不相同,將裝載區(qū)拷貝到執(zhí)行區(qū)
          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調(diào)用零初始化子程序

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


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();