历史上的今天
返回首页

历史上的今天

今天是:2025年03月24日(星期一)

正在发生

2020年03月24日 | STM32启动文件初探之startup_stm32f10x_hd.s(Reset_Handler函数)

2020-03-24 来源:eefocus

该文件主要实现目的:


设置初始SP

设置初始PC=Reset_Handler

设置向量表入口地址,并初始化向量表

调用SystemInit,把系统时钟配制成72M,SystemInit在库文件system_stm32f10.c定义

调转到标号_main,最终来到C程序文件


; Reset handler

Reset_Handler   PROC

                EXPORT  Reset_Handler             [WEAK]

                IMPORT  __main

                IMPORT  SystemInit

                LDR     R0, =SystemInit

                BLX     R0               

                LDR     R0, =__main

                BX      R0

                ENDP


第一行是程序注释,在汇编里面注释用的是“;”。


第二行是定义了一个子程序:Reset_Handler。


PROC 是子程序定义伪指令。一般用法为: 

1 子程序名PROC NEAR ( 或FAR ) 

2 …… 

3 ret 

4子程序名ENDP 

其中NEAR 和FAR 是属性词。 NEAR属性(段内近调用): 

调用程序和子程序在同一代码段中,只能被相同代码段的其他程序调用。 

FAR属性(段间远调用):调用程序和子程序不在同一代码段中,可以被相同或不同代码段的程序调用。


第三行EXPORT 表示Reset_Handler 这个子程序可供其他模块调用。


关键字[WEAK] 

表示弱定义,如果编译器发现在别处定义了同名的函数,则在链接时用别处的地址进行链接,如果其它地方没有定义,编译器也不报错,以此处地址进行链接。


第四行和第五行IMPORT 说明SystemInit 和__main 这两个标号在其他文件,在链接的时候需要到其他文件去寻找。


SystemInit在库文件system_stm32f10x.c 实现,用来初始化STM32的一系列时钟,把系统时钟设置为72MHZ。STM32的时钟比51 单片机复杂,需要经过一系列的配置才能达到稳定运行的状态。

__main 其实不是我们定义的,当编译器编译时,只要遇到这个标号就会定义这个函数,该函数的主要功能是:负责初始化栈、堆,配置系统境,并在最后跳转到用户自定义的main函数,从此来到C的世界。


第六行把SystemInit 的地址加载到寄存器R0。


第七行程序跳转到R0 中的地址执行程序,之后系统的时钟就被设置成72MHZ。


第八行把_main 的地址加载到寄存器R0。


第九行程序跳转到R0 中的地址执行程序,执行完毕之后就去到我们熟知的C 世界。


第十行表示子程序的结束。


推荐阅读

史海拾趣

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

Aeroflex Metelics / Hi-Rel Components是一家专注于高可靠性电子组件的制造商,为航空航天、国防、医疗和工业等领域提供高性能的组件和解决方案。以下是该公司发展的五个相关故事:

  1. 公司成立和早期发展: Aeroflex Metelics / Hi-Rel Components的历史可以追溯到1960年代初,当时该公司作为Metelics的一部分,成立于美国马萨诸塞州的劳伦斯市。最初,公司主要生产用于微波和射频应用的二极管和其他电子元件,为国防和航空航天等行业提供关键的部件。

  2. 技术创新和产品多样化: Aeroflex Metelics / Hi-Rel Components致力于技术创新和产品多样化,不断推出符合行业标准和客户需求的新产品。公司的产品范围逐渐扩展,包括功率放大器、混频器、开关和整流器等,涵盖了广泛的应用领域。

  3. 质量管理和认证: 为确保产品质量和可靠性,Aeroflex Metelics / Hi-Rel Components严格执行质量管理体系,并获得了多项国际认证,如ISO 9001和AS9100。公司在生产过程中采用先进的工艺和测试技术,确保产品符合客户的高要求和严格标准。

  4. 全球供应链和市场拓展: 随着业务规模的扩大和市场需求的增长,Aeroflex Metelics / Hi-Rel Components不断优化全球供应链,并在美国和其他地区建立了多个生产基地和销售办事处。公司通过广泛的销售网络和服务体系,加强了对客户的支持和服务,并开拓了新的市场领域。

  5. 成为行业领先供应商: 多年来,Aeroflex Metelics / Hi-Rel Components凭借其卓越的技术、丰富的经验和优质的产品,成为航空航天、国防和医疗等行业的重要供应商之一。公司在高可靠性电子组件领域的领先地位得到了进一步巩固,为客户提供了高品质、可靠的解决方案,赢得了良好的声誉和市场地位。

GREEGOO公司的发展小趣事
通过调整时钟信号的延迟来修正时序偏差,使时钟信号与数据采样时刻精确匹配。
Doodle Labs公司的发展小趣事

Doodle Labs非常重视企业文化的建设和发展。公司倡导开放、创新、协作、共赢的价值观,为员工提供良好的工作环境和发展机会。同时,Doodle Labs还积极参与公益事业和社会活动,为社会做出贡献。在未来,Doodle Labs将继续秉承这些价值观和精神,致力于成为全球领先的无线通信技术提供商和物联网解决方案提供商。

CTS [CTS Corporation]公司的发展小趣事

为了满足全球市场的需求,CTS开始实施全球化扩张战略。公司在北美、亚洲和欧洲等地设立了生产设施,以便更好地服务全球客户。同时,CTS还积极与各地的合作伙伴建立紧密的合作关系,共同推动电子元器件和传感器市场的发展。

Greenwich Instruments Ltd公司的发展小趣事

Greenconn Corp自创立之初便致力于连接器技术的研发与创新。在20世纪末,随着电子产品的普及和通讯技术的飞速发展,连接器作为电子设备间的桥梁,其重要性日益凸显。Greenconn Corp凭借其敏锐的市场洞察力和强大的研发实力,成功研发出了一系列高性能、高可靠性的连接器产品,迅速在汽车电子、通信设备等领域占据了一席之地。这些创新产品不仅满足了市场对连接器高质量、高效率的需求,还推动了整个电子行业的发展。

Control Sciences Inc公司的发展小趣事

随着技术的不断进步,Control Sciences Inc开始寻求更广阔的市场空间。公司积极参与国内外各大电子展会,展示其先进的产品和技术。同时,公司还加大了市场推广力度,与多个知名企业建立了战略合作关系。通过这些努力,Control Sciences Inc的产品逐渐走进了更多的企业和家庭,其品牌影响力也日益增强。

问答坊 | AI 解惑

产品规划、产品开发的概念和计划阶段的重要性

在柯维博士的《高效能人士7个习惯》中,他提出一个有趣的观点:任何创造实际是经过2个层次,一次是“心智的创造”,另一次才是“实际的创造”。其中心智的创造尤为重要,因为它是创新的源头和起始,难度更大,更为难能可贵。心理学家马斯洛也指出, ...…

查看全部问答>

wince里怎样显示bmp图片,像PC里缩略图那样显示??

如题:我想做一个程序,显示bmp图片,最好像在PC里显示缩略图那样显示bmp图片!!!…

查看全部问答>

问个单片机数据接收问题!(应该比较简单,来就送分)

    单个字符接收没什么问题,多字节接收不行了!比如我要从串口调试助手送出一串字符(AAC234,7568等),单片机接收后存到缓存里?有几个菜的问题先问下:这个字符串是动态的,个数不定,是不是只要将接收数组定义大点就可以,数据处理 ...…

查看全部问答>

单片机C语言视频教程

单片机C语言视频教程      这个是提供给不能上网或者网速慢的朋友一个方便。 有条件的朋友可以到这个网站去下载:http://seemy.go.51.net   资料齐全,会都是视频教程。 51单片机C视频教程在很贴子上看到,很多朋 ...…

查看全部问答>

pic12f683输出问题

#include<pic.h>void main(void){ANSEL=0x00;TRISIO=0x00000000; GPIO=0xff;GIE=1;while(1){}}问题:   为啥我的单片机管脚没有输出?…

查看全部问答>

【问TI】LM3S系列基本上是10位ADC,与别的厂家的12位的ADC差点那?优越在什么地方?

LM3S系列基本上是10位ADC,与别的厂家的12位的ADC差点那?优越在什么地方?看了个帖子说LM3S虽然ADC是10位的,但是精度非常高。专家给介绍下!…

查看全部问答>

LM3S系列的ROM RUN和RAM RUN

试了两款LM3S8962和LM3S9B96,问题都一样。LM3S系列能够将程序下载到内存,然后修改PC指针,在内存中运行,这样调试程序下载速度比较快,也减少了flash的读写次数,这是背景。除了一些大的程序,我都是在内存中调试,简称RAM RUN,大家可以翻翻我以 ...…

查看全部问答>

2011仪器器件清单分析(全)——决战2011全国大学生电子设计竞赛

本帖最后由 paulhyde 于 2014-9-15 09:27 编辑 决战2011全国大学生电子设计竞赛——仪器器件清单分析 格式好乱……原文可以在附件中下载!另外,有同学转载我没有意见,但烦请注明出处! 2009 2011 1.基本仪器清单 20MHz普通示波器(双通道, ...…

查看全部问答>

求MSP430+MLX90615温度传感器例程

RT,苦求MSP430+MLX90615温度传感器例程,有用过的兄弟姐妹望出手相助一下,不胜感激!…

查看全部问答>

6455DSP断点问题

请问:C6455调试过程中设置断点,程序不中断是怎么回事??…

查看全部问答>