<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 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)代碼含義,謝謝!


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

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

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

上面應該對應
__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];程序一運行跳到這里,why?
0x08001106 4700 BX r0,r0,#0

上面對應
Reset_Handler PROC
EXPORTReset_Handler [WEAK]
IMPORT__main
LDR R0, =__main
BX R0
ENDP

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

解答:

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

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



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>