历史上的今天
返回首页

历史上的今天

今天是:2025年07月01日(星期二)

正在发生

2021年07月01日 | STM32启动代码分析问题

2021-07-01 来源:eefocus

能否讲解一下startup_stm32f10x_cl.s启动代码含义,谢谢!


我现在看反汇编如下

0x08000000 0678 LSLS r0,r7,#25(查看Memory窗口0x08000000 : 78 06 00 20 ---STM32小端缘故)


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


那位能说一下为什么跳到0x08001104,即PC =0x08001104, 我想应该PC应该先跳到0x08000000?


解答:


cortex-M3和ARM9的架构有很大区别,ARM7、ARM9在复位后是从地址0处开始执行指令,也就是说地址0x00000000的内容是指令。而cortex-M3的异常向量表中的内容并不是指令,0x00000000处(当然也可能映射到别的范围)是主堆栈指针的数值,0x00000004的内容是复位后需要跳转到的地址,是一个地址而不是一条指令。


stm32选择flash启动方式,中断向量表映射到0x08000000,由楼主给出的反汇编可知,复位后主堆栈指针的位置是0x20000678,0x08000004位置的数值是0x08001105,由于cortex-M3只能运行在thumb2状态,所以要保证向PC(R15)写入的数值的bit0必须是1(如果向PC写入的数值的bit0是0,则处理器认为试图切入ARM状态,会产生fault),而实际上stm32的指令是半字对齐的,所以复位后会跳转到0x08001104.

推荐阅读

史海拾趣

Elpaq公司的发展小趣事
安美通(APPCON)公司的发展小趣事

随着市场的不断变化和客户需求的升级,安美通意识到只有不断创新才能在竞争中立于不败之地。因此,公司加大了对研发的投入,积极引进高端人才,并与多所高校和研究机构建立了紧密的合作关系。通过持续的技术创新,安美通成功推出了一系列具有自主知识产权的新产品,进一步巩固了其在行业内的领先地位。

Circuit Assembly公司的发展小趣事

安美通非常重视企业文化建设和团队建设。公司倡导创新、务实、合作的企业文化,为员工提供了一个宽松、自由、充满激情的工作环境。同时,公司还积极开展各类培训活动,提升员工的专业素养和综合能力。这些措施使得安美通的团队更加团结、高效,为公司的持续发展提供了有力的保障。

这五个故事虽然只是安美通发展过程中的一部分,但它们充分展示了安美通在电子行业中不断努力、创新、拓展的精神和成果。未来,安美通将继续秉承这种精神,不断推动公司的发展和进步。

CyOptics Inc公司的发展小趣事

在被Avago收购后,CyOptics并未停止其技术创新的步伐。公司继续投入研发,推出了一系列新的光学产品和解决方案,以满足不断增长的市场需求。例如,CyOptics的物理介质相关(PMD)IC产品系列,不仅提供了完整的GaAs芯片组件,还提供了跨阻放大器(TIA)、激光驱动器(LD)等一站式芯片套件解决方案,为客户提供了更加便捷和高效的服务。

High Tech Chips Inc公司的发展小趣事

在被Avago收购后,CyOptics并未停止其技术创新的步伐。公司继续投入研发,推出了一系列新的光学产品和解决方案,以满足不断增长的市场需求。例如,CyOptics的物理介质相关(PMD)IC产品系列,不仅提供了完整的GaAs芯片组件,还提供了跨阻放大器(TIA)、激光驱动器(LD)等一站式芯片套件解决方案,为客户提供了更加便捷和高效的服务。

Aeroflex Metelics / Hi-Rel Components公司的发展小趣事

2013年4月,Avago宣布以约4亿美元的价格收购CyOptics Inc。这一收购标志着CyOptics的技术实力和市场地位得到了业界的进一步认可。Avago看中了CyOptics在InP光学芯片及组件领域的领先地位,希望借此增强其在新兴40G和100G企业及数据中心应用市场中的竞争力。收购完成后,CyOptics成为了Avago旗下光器件品牌,继续为市场提供高质量的光学产品。

问答坊 | AI 解惑

哪位有TMS320DM6437串口通信的资料

如果有的话,共享一下,谢谢了~~·…

查看全部问答>

VS2005 Win32 位图控件

  我现在用VS2005 得移动设备下得Win32编写应用软件。发现在VS2005移动设备下,没有包含CBitmap Button类。   请问我才能怎么实现位图控件呢?   谢谢!!!…

查看全部问答>

"no apm support in kernel "

我编译linux2.4的内核+板子带的文件系统烧到优龙的板子,结果报这个,请问是什么原因有什么解决方法,那位大侠能说下哈 menuconfig里没有电源管理的选项 板子的型号是fs2410…

查看全部问答>

Wince5.0 中RTL8139的驱动支持RTL8139D的芯片么

我用的CEPC的BSP,平台是PC104,网卡是RTL8139D,我在PB中加入了RTL8139的驱动,去掉了enable KITL选项,可是系统启动后一切正常,就是ping不通, error code 11010 ping自己能ping通, ipconfig也正常,网口发送指示灯都不闪,我觉得根本包就没 ...…

查看全部问答>

winCE 參考的表頭

因為公司的需要, 必須將原本寫好在windows下的程式改寫到winCE下面, 發現像是原本\"unistd.h\" \"stdint.h\"等可用的表頭, 都沒有辦法被使用了, 是否有比較好的網站或資源能在win CE 下找到對應的表頭呢? 謝謝各位先進的指教囉^^…

查看全部问答>

请教:如何使得屏幕保持常亮(visual basic 2008)

使用VS2008,使用visual basic编写的程序,使用什么代码才能使得屏幕保持常亮?谢谢了!…

查看全部问答>

如何在通话时,实现静音?

使用TAPI实现了通话,现在要增加一项功能,需要静音掉我的语音,就是让对方听不到我讲话,如何实现?…

查看全部问答>

9B96原理图(有部分错误!)

目前是RS485收发搞反掉了!把TFT 的数据线搞错了,应朋友需要才发的,SCH没修改。。。。。。。。。…

查看全部问答>

TI zigbee sensor monitor找不到串口

  别人的计算机可以,我的不行,不知道咋回事?…

查看全部问答>

出点不用的元件

7805 17片7809 3片7812 4片                         励源 PS500DC4SR 电源模块 1     &nb ...…

查看全部问答>