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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM的嵌入式BootLoader設(shè)計(jì)與啟動(dòng)過程

          基于ARM的嵌入式BootLoader設(shè)計(jì)與啟動(dòng)過程

          作者: 時(shí)間:2012-05-21 來源:網(wǎng)絡(luò) 收藏

          3.3 初始化堆棧

          ARM處理器有7種工作模式,每種模式都有獨(dú)立的堆棧指針寄存器(SP),并定義相應(yīng)地址。改變狀態(tài)寄存器(CPSR)的狀態(tài)位,可使處理器切換到不同模式,然后給SP賦值,就實(shí)現(xiàn)了堆棧的初始化。需注意的是:不要切換到用戶模式進(jìn)行本模式的堆棧設(shè)置,因?yàn)檫M(jìn)入該模式后就不能修改CPSR回到別的模式了,會(huì)影響程序的順利執(zhí)行[3]。初始化堆棧的代碼如下所示:(以2個(gè)不同的SP寄存器SP_IRQ、SP_FIQ為例)

          InitStacks: mrs r0,cpsr ;CPSR=》R0

          bic r0,r0,#MODEMASK|NOINT ;屏蔽模式位和中斷

          orr r1,r0,#IRQMODE|NOINT ;MODEMASK =0x1f, NOINT = 0x80

          msr cpsr_cxsf,r1 ;轉(zhuǎn)到IRQ模式

          ldr sp,=IRQStack ;設(shè)置SP_irq

          orr r1,r0,#FIQMODE

          msr cpsr_cxsf,r1 ;轉(zhuǎn)到FIQ模式

          ldr sp,=FIQStack

          3.4 C例程全局變量初始化

          全局變量的初始化,就是完成從ROM到RAM的數(shù)據(jù)傳輸和內(nèi)容清零??蓤?zhí)行程序的映像結(jié)構(gòu)由RO段、RW段和ZI段三部分組成,分別為只讀數(shù)據(jù)段、可寫數(shù)據(jù)段和堆棧段。其中RO段在Flash和RAM里都可運(yùn)行;而RW和ZI段是必須轉(zhuǎn)移到RAM中去的。盡管RAM的運(yùn)行速度比Flash快的多,但由于RO段比較小,拷貝到RAM也需要時(shí)間,還要程序跳轉(zhuǎn),一比較兩者的啟動(dòng)時(shí)間差不多,最終我們選擇讓RO段在Flash中運(yùn)行。

          開發(fā)工具中的鏈接器(Linker)提供了一定的機(jī)制來幫助我們完成這部分工作,其中|Image$$ZI$$Base|,|Image$$ZI$$Limit|,|Image$$RW$$Base|,|Image$$RO$$Limit| 是由鏈接器定義輸出的。主要是輸出段的起始和終止定位信息,具體程序?qū)崿F(xiàn)如下:

          startram : LDR a1,=|Image$$ZI$$Base| ;ZI段在RAM里面的起始地址

          MOV a3,#0 ;寄存器清0

          LDR a2,=|Image$$ZI$$Limit| ;ZI段在RAM里面的結(jié)束地址

          CMP a1,a2

          BEQ move_data

          clear_loop : STR a3,[a1],#4 ;清一個(gè)字為0, a1 += 4

          CMP a1,a2

          BNE clear_loop

          move_data LDR a1,=|Image$$RW$$Base| ;RW段在RAM中的起始地址

          LDR a2,=|Image$$RO$$Limit| ;RW段在ROM中的起始地址

          LDR a3,=|Image$$ZI$$Base| ;RW段在RAM中的結(jié)束地址

          CMP a1,a3

          BEQ goto_main

          move_loop : LDR a4,[a2],#4

          STR a4,[a1],#4 ;拷貝一個(gè)字,a1 += 4, a2 += 4

          CMP a1,a3

          BNE move_loop

          goto_main : BL Main



          關(guān)鍵詞: 地址重映射 S3C44B0X uCLinux

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();