中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        ARM初學(xué)寶典

        ——
        作者: 時(shí)間:2007-05-29 來(lái)源: 收藏
        一直都在聽(tīng)說(shuō)有多么好,有多神奇,有多難學(xué)。故學(xué)它時(shí)都興奮加恐懼。呵呵,我剛好用也有一段時(shí)間了。寫點(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)地址
           你編寫的代碼啟動(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)
           在ADS軟件上:ADS軟件會(huì)把ARM Linker-Layout-Place at beginning of image-Objiect/symbol中指明開(kāi)始代碼的文件。
        Section中指明代碼開(kāi)始的程序塊。一般習(xí)慣Objiect/symbol中填寫的時(shí)Startup.o。Section中填寫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中指明就行了。
           這樣我們自己編寫的代碼、實(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)行堆棧的初始化。
           初始化外部總線控制
           設(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  ;管理模式堆??臻g
        IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;中斷模式堆??臻g
        FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;快速中斷模式堆??臻g
        AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;中止義模式堆??臻g
        UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;未定義模式堆棧
        10,邊看書邊實(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的書籍,現(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ù)專區(qū)

        關(guān)閉