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

          新聞中心

          ARM初學(xué)寶典

          ——
          作者: 時(shí)間:2007-05-29 來(lái)源: 收藏
          一直都在聽(tīng)說(shuō)有多么好,有多神奇,有多難學(xué)。故學(xué)它時(shí)都興奮加恐懼。呵呵,我剛好用也有一段時(shí)間了。寫(xiě)點(diǎn)東西給的初學(xué)者,希望能起到幫助作用。
          1,記?。篈RM很簡(jiǎn)單,就如從51轉(zhuǎn)換到PIC或者轉(zhuǎn)換到AVR一樣簡(jiǎn)單。ARM的一個(gè)功能就如同掌握一個(gè)其他IC的使用一樣,如時(shí)鐘芯片,存在芯片,等等,甚至更簡(jiǎn)單。所以ARM的那些功能就可以忽略了。
          2,和51系列相比,arm的寄存器不在存儲(chǔ)空間之內(nèi),而且不分?jǐn)?shù)據(jù)、程序空間。記住它的分配圖.
          3,ARM有多種處理器模式,每個(gè)模式都有自己的獨(dú)立
             記住表格
             記住寄存器的使用
          4,ARM的中斷加強(qiáng)了,增加了軟件中斷,掌握swi
             可以把處理器模式及異??闯啥际侵袛嗟臄U(kuò)張,從這些方面去理解也許快些。
             swi是嵌入式系統(tǒng)中任務(wù)切換的一個(gè)關(guān)鍵指令。故先有個(gè)心里準(zhǔn)備。用法:swi 立即數(shù)。執(zhí)行該執(zhí)行時(shí),程序會(huì)跑到swi中斷處。立即數(shù)包含在該指令代碼中,如果要根據(jù)立即數(shù)執(zhí)行程序必須找出立即數(shù)。
          5,ARM的啟動(dòng)程序及引導(dǎo)地址
             你編寫(xiě)的代碼啟動(dòng)時(shí):ARM都是從0x00000000開(kāi)始運(yùn)行。
             實(shí)際芯片運(yùn)行時(shí):ARM啟動(dòng)時(shí),先根據(jù)硬件判斷是否進(jìn)入ISP還是經(jīng)入程序運(yùn)行。如進(jìn)行程序運(yùn)行,又會(huì)根據(jù)硬件判斷會(huì)從0x00000000內(nèi)部 flash空間,還是外部flash空間0x80000000處運(yùn)行(此時(shí)芯片會(huì)自動(dòng)改變映射,也就是將0x80000000映射到 0x00000000)
             在A(yíng)DS軟件上:ADS軟件會(huì)把ARM Linker-Layout-Place at beginning of image-Objiect/symbol中指明開(kāi)始代碼的文件。
          Section中指明代碼開(kāi)始的程序塊。一般習(xí)慣Objiect/symbol中填寫(xiě)的時(shí)Startup.o。Section中填寫(xiě)Start。因?yàn)榇蠹乙话銜?huì)將開(kāi)始程序放在Startup文件中的Start段。
             ADS軟件知道了我們程序的開(kāi)始地方,還不知道這個(gè)程序的開(kāi)始地方放到實(shí)際芯片的那個(gè)地址,所以我們還要為ADS軟件指明開(kāi)始地址,ARM Linker-Option-Image entry point中指明就行了。
             這樣我們自己編寫(xiě)的代碼、實(shí)際芯片、仿真器程序起始的關(guān)系就差不多明白了,然后記住下面中斷向量表的代碼。
          6,地址重新映射
             這是個(gè)新概念,但記住它的功能是存儲(chǔ)器映射用于改變從0x00000000開(kāi)始的中斷向量的映射。記住1:是0x00000000開(kāi)始的中斷向量的映射;記住2:為什么要這樣做是為了不管你這段程序放在芯片實(shí)際的那個(gè)可以開(kāi)始放的地方,ARM內(nèi)部都可以從0x00000000開(kāi)始運(yùn)行。
          7,匯編語(yǔ)言與c語(yǔ)言的混合編程
             如果你不會(huì)這個(gè)先最好了解一點(diǎn)概念
             匯編與c的參數(shù)傳遞是靠R0,R1這些寄存器傳遞的。
             函數(shù)的返回值也是靠R0。
             匯編中的標(biāo)號(hào)與函數(shù)名相當(dāng)
             c語(yǔ)言函數(shù)結(jié)束時(shí)實(shí)際上是匯編子程序的返回指令,故用匯編語(yǔ)言中用BL調(diào)用c的函數(shù)。否則就會(huì)返回出錯(cuò)。
          8,匯編指令的記憶
             多了幾種尋址方式
             先記住基本指令然后進(jìn)行擴(kuò)展,在記指令的執(zhí)行條件,在搞懂特性符合的意義,如!,^等
          我先是記住了以下幾個(gè)指令:B,BX,BL,LDR,STR,LDM,STM,MOV,MRS,MSR,DCD,SWI,ADD,AND,CMP,MUL這些指令后,以后就邊用邊記。
          9,ARM初始化要干些什么
             ARM初始化靈活方式,很多功能都可以方便設(shè)置。故開(kāi)始初始化的事情也是蠻的多,主要做那些呢
             開(kāi)始的中斷向量表要做好吧。
             每個(gè)處理器模式都有自己的SP,你要指明每個(gè)SP的開(kāi)始地址,進(jìn)行堆棧的初始化。
             初始化外部總線(xiàn)控制
             設(shè)置存儲(chǔ)器加速模塊
             初始化時(shí)鐘,初始化VIC等等,當(dāng)然有很多你不必管,先拷貝
             在網(wǎng)上找資料就行了。中斷向量表與初始化堆棧一般如下
          ;中斷向量表
          Reset
                  LDR     PC, ResetAddr
                  LDR     PC, UndefinedAddr
                  LDR     PC, SWI_Addr
                  LDR     PC, PrefetchAddr
                  LDR     PC, DataAbortAddr
                  DCD     0xb9205f80           ;ARM保留位,使向量表所有數(shù)據(jù)32位累加和為0,才能脫機(jī)運(yùn)行。
                  LDR     PC, [PC, #-0xff0]    ;
                  LDR     PC, FIQ_Addr

          ResetAddr           DCD     ResetInit
          UndefinedAddr       DCD     Undefined
          SWI_Addr            DCD     SoftwareInterrupt
          PrefetchAddr        DCD     PrefetchAbort
          DataAbortAddr       DCD     DataAbort
          Nouse               DCD     0  ;
          IRQ_Addr            DCD     0  ;
          FIQ_Addr            DCD     FIQ_Handler

          ;未定義指令
          Undefined
                  B       Undefined

          ;軟中斷
          SoftwareInterrupt
                  B       SoftwareInterrupt

          ;取指令中止
          PrefetchAbort
                  B       PrefetchAbort

          ;取數(shù)據(jù)中止
          DataAbort
                  B       DataAbort

          ;快速中斷
          FIQ_Handler
                  STMFD   SP!, {R0-R3, LR}
                  BL      FIQ_Exception
                  LDMFD   SP!, {R0-R3, LR}
                  SUBS    PC,  LR,  #4

          ;初始化堆棧

          InitStack   
                  MOV     R0, LR

          ;設(shè)置管理模式堆棧
                  MSR     CPSR_c, #0xd3
                  LDR     SP, StackSvc
          ;設(shè)置中斷模式堆棧
                  MSR     CPSR_c, #0xd2
                  LDR     SP, StackIrq
          ;設(shè)置快速中斷模式堆棧
                  MSR     CPSR_c, #0xd1
                  LDR     SP, StackFiq
          ;設(shè)置中止模式堆棧
                  MSR     CPSR_c, #0xd7
                  LDR     SP, StackAbt
          ;設(shè)置未定義模式堆棧
                  MSR     CPSR_c, #0xdb
                  LDR     SP, StackUnd
          ;設(shè)置系統(tǒng)模式堆棧
                  MSR     CPSR_c, #0xdf
                  LDR     SP, =StackUsr

                  MOV     PC, R0

          StackSvc           DCD     SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4  ;
          StackIrq           DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
          StackFiq           DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
          StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
          StackUnd           DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)* 4

                  AREA    MyStacks, DATA, NOINIT, ALIGN=2
          SvcStackSpace      SPACE   SVC_STACK_LEGTH * 4  ;管理模式堆棧空間
          IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;中斷模式堆??臻g
          FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;快速中斷模式堆??臻g
          AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;中止義模式堆棧空間
          UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;未定義模式堆棧
          10,邊看書(shū)邊實(shí)踐,不斷培養(yǎng)自己對(duì)ARM的興趣,不斷取得點(diǎn)成績(jī),別奢望一口吃成一個(gè)胖子,不斷的給自己帶來(lái)成功得快樂(lè),我們都需要短期成績(jī)的刺激才能長(zhǎng)久的堅(jiān)持。
          11,做一個(gè)項(xiàng)目吧。否則永遠(yuǎn)也不能說(shuō)你學(xué)會(huì)了。
          12,本文給初學(xué)者指路用,背下本文,然后去看學(xué)習(xí)ARM的書(shū)籍,現(xiàn)在網(wǎng)上到處都有的ARM指令集,ARM的芯片資料,ARM應(yīng)用系統(tǒng)開(kāi)發(fā)詳解,ADS-EasyJTAG,本篇寶典將是你學(xué)習(xí)ARM的加速器。

          c語(yǔ)言相關(guān)文章:c語(yǔ)言教程




          關(guān)鍵詞: ARM

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();