新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM編程:ARM初始化,堆棧地址是怎樣計算的

        ARM編程:ARM初始化,堆棧地址是怎樣計算的

        作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

        USR_STACK_LEGTHEQU64
        SVC_STACK_LEGTHEQU0
        FIQ_STACK_LEGTHEQU16
        IRQ_STACK_LEGTHEQU64
        ABT_STACK_LEGTHEQU0
        UND_STACK_LEGTHEQU0
        ;名稱:InitStack
        ;功能:堆棧初始化,即初始化各模式下的堆棧指針
        ;入口參數(shù):無
        ;出口參數(shù):無
        ;說明:在特權(quán)模式下調(diào)用此子程序,比如復(fù)位后的管理模式
        InitStack
        MOVR0,LR;R0<=LR,因為各種模式下R0是相同


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

        MOVPC,R0

        StackUsrDCDUsrStackSpace+(USR_STACK_LEGTH-1)*4
        StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4
        StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4
        StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4
        StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4
        StackUndDCDUndtStackSpace+(UND_STACK_LEGTH-1)*4


        ;分配堆棧空間
        AREAMyStacks,DATA,NOINIT,ALIGN=2
        UsrStackSpaceSPACEUSR_STACK_LEGTH*4;用戶(系統(tǒng))模式堆棧空間
        SvcStackSpaceSPACESVC_STACK_LEGTH*4;管理模式堆棧空間
        IrqStackSpaceSPACEIRQ_STACK_LEGTH*4;中斷模式堆棧空間
        FiqStackSpaceSPACEFIQ_STACK_LEGTH*4;快速中斷模式堆棧空間
        AbtStackSpaceSPACEABT_STACK_LEGTH*4;中止義模式堆棧空間
        UndtStackSpaceSPACEUND_STACK_LEGTH*4;未定義模式堆棧



        經(jīng)過ADS1.2仿真;發(fā)現(xiàn)地址變化如下
        svc0x400030fc
        irq0x400031fc
        fiq0x4000323c
        abort0x4000323c
        undef0x4000323c
        sys0x400030fc

        svcfirirqabortundefsys的地址是怎樣計算出來的?

        本文引用地址:http://www.104case.com/article/201611/322956.htm
        • 關(guān)鍵是MyStacks的起始地址.看看ADS的配置里linker選項里的配置. [xiaogang]2007-4-1611:57:05

          如果沒有配置.則看AREAMyStacks,DATA,NOINIT,ALIGN=2后面是否有個
          ^XXXXX..來定義MyStacks的起始地址
          得到起始地址后,再由SPACE按順序分配內(nèi)存空間

        • 對,RWBase設(shè)置的是0x40003000 [jinjing999666]2007-4-1620:40:08

          我又把RWBase設(shè)置的是0x40005000
          觀察都變成了
          svc0x400050fc
          irq0x400051fc
          fiq0x4000523c
          undef0x4000523c
          sys0x400050fc



        關(guān)鍵詞: ARM編程ARM初始化堆棧地

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 柏乡县| 龙江县| 禄丰县| 凭祥市| 灌阳县| 肃北| 深圳市| 游戏| 建德市| 淮南市| 丹江口市| 三台县| 历史| 桂林市| 松原市| 东乌珠穆沁旗| 玉龙| 江孜县| 新丰县| 阜新市| 图木舒克市| 卓尼县| SHOW| 江孜县| 宜阳县| 多伦县| 廉江市| 咸阳市| 满洲里市| 长泰县| 中西区| 吉首市| 白河县| 娱乐| 栾城县| 西吉县| 沐川县| 抚顺市| 故城县| 南涧| 弥渡县|