在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32啟動(dòng)代碼分析問(wèn)題

            STM32啟動(dòng)代碼分析問(wèn)題

            作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
            能否講解一下startup_stm32f10x_cl.s啟動(dòng)代碼含義,謝謝!


            我現(xiàn)在看反匯編如下
            0x08000000 0678 LSLS r0,r7,#25(查看Memory窗口0x08000000 : 78 06 00 20 ---STM32小端緣故)

            本文引用地址:http://www.biyoush.com/article/201611/317731.htm

            0x08000002 2000 MOVS r0,#0x00
            0x08000004 1105 ASRS r5,r0,#408
            0x08000006 0800 LSRS r0,r0,#00A
            。。。。。。。。。。。。。。。。。。。。。。

            上面應(yīng)該對(duì)應(yīng)
            __Vectors DCD __initial_sp ; Top of Stack
            DCD Reset_Handler ; Reset Handler
            DCD NMI_Handler ; NMI Handler
            DCD HardFault_Handler ; Hard Fault Handler
            DCD MemManage_Handler ; MPU Fault Handler
            DCD BusFault_Handler ; Bus Fault Handler
            DCD UsageFault_Handler ; Usage Fault Handler



            0x08001104 4808 LDR r0,[pc,#32];程序一運(yùn)行跳到這里,why?
            0x08001106 4700 BX r0,r0,#0

            上面對(duì)應(yīng)
            Reset_Handler PROC
            EXPORTReset_Handler [WEAK]
            IMPORT__main
            LDR R0, =__main
            BX R0
            ENDP

            那位能說(shuō)一下為什么跳到0x08001104,即PC =0x08001104, 我想應(yīng)該P(yáng)C應(yīng)該先跳到0x08000000?

            解答:

            cortex-M3和ARM9的架構(gòu)有很大區(qū)別,ARM7、ARM9在復(fù)位后是從地址0處開始執(zhí)行指令,也就是說(shuō)地址0x00000000的內(nèi)容是指令。而cortex-M3的異常向量表中的內(nèi)容并不是指令,0x00000000處(當(dāng)然也可能映射到別的范圍)是主堆棧指針的數(shù)值,0x00000004的內(nèi)容是復(fù)位后需要跳轉(zhuǎn)到的地址,是一個(gè)地址而不是一條指令。

            stm32選擇flash啟動(dòng)方式,中斷向量表映射到0x08000000,由樓主給出的反匯編可知,復(fù)位后主堆棧指針的位置是0x20000678,0x08000004位置的數(shù)值是0x08001105,由于cortex-M3只能運(yùn)行在thumb2狀態(tài),所以要保證向PC(R15)寫入的數(shù)值的bit0必須是1(如果向PC寫入的數(shù)值的bit0是0,則處理器認(rèn)為試圖切入ARM狀態(tài),會(huì)產(chǎn)生fault),而實(shí)際上stm32的指令是半字對(duì)齊的,所以復(fù)位后會(huì)跳轉(zhuǎn)到0x08001104.



            評(píng)論


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

            關(guān)閉