历史上的今天
返回首页

历史上的今天

今天是:2025年01月08日(星期三)

正在发生

2019年01月08日 | STM32启动文件(Reset_Handler函数)

2019-01-08 来源: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 世界。


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


推荐阅读

史海拾趣

Hisetec Electronic Co Ltd公司的发展小趣事

背景:随着环保意识的增强,消费者对电子产品的环保要求也越来越高。Hisetec Electronic Co Ltd公司积极响应这一趋势,将绿色环保理念融入产品设计、生产和回收的全过程。

发展:公司投入大量资金研发环保材料和生产工艺,确保产品从源头到终端都符合环保标准。同时,公司还建立了完善的电子废弃物回收体系,对废旧电子产品进行拆解、分类和再利用。这些举措不仅赢得了消费者的信任和支持,还推动了整个电子行业的绿色升级。

C.K Magma公司的发展小趣事

在追求经济效益的同时,C.K Magma公司也积极履行社会责任。他们注重绿色发展和可持续经营,通过采用环保材料和工艺、优化生产过程等方式,降低产品对环境的影响。此外,公司还积极参与公益事业,为社会做出贡献。这些举措不仅提升了公司的社会形象,也为公司的长远发展提供了有力保障。

这五个故事展示了C.K Magma公司在电子行业中的发展历程和取得的成就。通过技术突破、市场拓展、国际合作、创新产品和绿色发展等方面的努力,公司逐渐在行业中崭露头角,成为了一家具有影响力和竞争力的企业。

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

进入21世纪后,数字视频应用的兴起为Exar提供了新的发展机遇。为了抓住这一机遇,公司在2000年推出了视频处理器和编解码器产品。这些产品不仅满足了市场对高质量视频处理的需求,也进一步巩固了Exar在通信和视频处理领域的地位。

Caddell-Burns Manufacturing公司的发展小趣事

随着科技的不断发展,Caddell-Burns Manufacturing公司意识到技术创新是保持竞争力的关键。于是,公司加大了对研发的投入,引进了一批高素质的技术人才,不断推出具有创新性的电子产品。这些新产品不仅提高了公司的市场份额,也为客户提供了更优质的服务。同时,公司还积极与高校和研究机构合作,开展产学研一体化项目,进一步提升了公司的技术实力。

Echelon公司的发展小趣事

随着公司业务的不断发展,Echelon开始积极拓展全球市场。公司通过在海外设立分支机构、与当地企业合作等方式,将LonWorks技术和能源管理服务方案推广至全球各地。同时,Echelon还积极参与国际能源管理标准的制定和推广工作,提升了公司在国际市场的知名度和影响力。

巨盛电子(Chesen)公司的发展小趣事

在电子行业,成本控制对于企业的竞争力至关重要。巨盛电子(Chesen)通过优化供应链管理,实现了成本的降低。公司与供应商建立了长期稳定的合作关系,实现了原材料的规模化采购和成本控制。同时,公司还加强了对生产过程的监控和管理,降低了生产过程中的浪费和损耗。这些措施使得巨盛电子在保持产品质量的同时,实现了成本的降低,提高了企业的盈利能力。

问答坊 | AI 解惑

关于TI 6000系列DSP优化经验(转帖)

看到网上很多网友对TI 6000系列DSP优化工作感到苦恼,在此我总结下我的优化经验,希望对大家有帮助。 一、首先考虑从系统结构上优化,比如尽量减少待处理数据的无谓搬移,考虑你DSP片内存储量和每次处理数据量对系统结构优化,这部分的优化应该最 ...…

查看全部问答>

【ATMEL技术问题】关于KEIL下AT91R40008启动代码问题

用KEIL 软件建立一个工程,自动生成一个启动代码STartup.S ; 但是问题来了,这个代码有点不知所云,编译出错哦啊,请大侠指点!下面是代码 /*****************************************************************************/;/* STARTUP.S: Start ...…

查看全部问答>

菜鸟提问:SHBrowseForForlder()不能用,怎么代替

我是个初学者,我这个平台不能使用SHBrowseForForlder()这个方法,想找另外一个方法来代替SHBrowseForFolder,达到相同的效果, 或者可以不用打开浏览文件夹着个对话框,直接可以保存文件到指定目录也可以。劳驾各位帮忙啊…

查看全部问答>

求助:蓝牙和WIFI共存的问题

关于BT与WIFI共存时的设计,小弟有些问题,实在是不太明白,请教各位高手。 1. 我在网上看到有人说如果蓝牙和WIFI的物理隔离达到30dB以上,则两者之间的相互影响可以基本忽略。请问如果才能做到物理隔离达到30dB以上呢?是否天线距离远一些就可以 ...…

查看全部问答>

关于pc104总线驱动的制作

小弟刚刚做了一块基于pc104总线的DA板卡,但是现在要与基于pc104总线的3350主板进行交互,主要是对pc104总线的数据进行读取,需要制作驱动,小弟第一次开发,有那位大侠能够给一个例子或其他的资料,多谢…

查看全部问答>

螺纹的检测技术

各位大虾,有什么方法可以检测孔内的螺纹?只要检测孔内是否有螺纹就可以了。…

查看全部问答>

向大家请教一下uc/os-II多任务的运行机制?

有一个如下的uc/os-II源代码,就是采用信号量机制使两个任务共享一个串口com1,去打印一条字符串。 [code] #include \"config.h\" #define        Task0StkLengh        64       ...…

查看全部问答>

【课后练习】LaunchPad课后练习七之定时器

课后练习七之定时器   (定时器看起来简单,却搞了好久,和之前的430定时器不太一样,看了很多次,还有很多没弄出来的地方,有几个地方还是没懂) 1.TIMER_A由以下部分组成 [1] 计数器部分 输入的时钟源具有4种选择,所选择的时钟源又可 ...…

查看全部问答>

4位半的AD达到5位半分辨率的讨论,欢迎跟进一起探讨。

5位半的数字万用表没有一千块RMB是拿不下来的,本帖想讨论能否设计一种廉价的方案实施一个5位半表呢? ICL7135是4位半AD转换器,价格低廉,才4块钱多些,如果采用过采样编程技术,是否可以做出一个5位半分辨率的万用表呢? 欢迎讨论。 如果经研 ...…

查看全部问答>