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

          新聞中心

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

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

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

          USR_STACK_LEGTHEQU64
          SVC_STACK_LEGTHEQU0
          FIQ_STACK_LEGTHEQU16
          IRQ_STACK_LEGTHEQU64
          ABT_STACK_LEGTHEQU0
          UND_STACK_LEGTHEQU0
          ;名稱:InitStack
          ;功能:堆棧初始化,即初始化各模式下的堆棧指針。
          ;入口參數(shù):無(wú)
          ;出口參數(shù):無(wú)
          ;說(shuō)明:在特權(quán)模式下調(diào)用此子程序,比如復(fù)位后的管理模式
          InitStack
          MOVR0,LR;R0<=LR,因?yàn)楦鞣N模式下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))模式堆??臻g
          SvcStackSpaceSPACESVC_STACK_LEGTH*4;管理模式堆棧空間
          IrqStackSpaceSPACEIRQ_STACK_LEGTH*4;中斷模式堆??臻g
          FiqStackSpaceSPACEFIQ_STACK_LEGTH*4;快速中斷模式堆棧空間
          AbtStackSpaceSPACEABT_STACK_LEGTH*4;中止義模式堆??臻g
          UndtStackSpaceSPACEUND_STACK_LEGTH*4;未定義模式堆棧



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

          svcfirirqabortundefsys的地址是怎樣計(jì)算出來(lái)的?

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

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

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

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



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

          評(píng)論


          技術(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); })();