历史上的今天
返回首页

历史上的今天

今天是:2024年09月12日(星期四)

正在发生

2019年09月12日 | 秉火429笔记之四启动文件分析

2019-09-12 来源:eefocus

名为“startup_stm32f429_439xx.s”的文件,它里边使用汇编语言写好了基本程序,当STM32芯片上电启动的时候,首先会执行这里的汇编程序,从而建立起C语言的运行环境,所以我们把这个文件称为启动文件。该文件使用的汇编指令是Cortex-M4内核支持的指令,可从《Cortex-M4 Technical Reference Manual》查到,也可参考《Cortex-M3权威指南中文》,M3跟M4大部分汇编指令相同。


startup_stm32f429_439xx.s文件是由官方提供的,一般有需要也是在官方的基础上修改,不会自己完全重写。该文件可以从 KEIL5 安装目录找到,也可以从 ST 库里面找到,找到该文件后把启动文件添加到工程里面即可。不同型号的芯片以及不同编译环境下使用的汇编文件是不一样的,但功能相同。


启动文件主要功能:


初始化堆栈指针 SP

初始化程序计数器指针 PC

设置堆、栈的大小

设置中断向量表的入口地址

配置外部SRAM作为数据存储器(根据需要配置)

调用systemInit() 函数配置STM32的系统时钟

设置C库的分支入口“ __main” (最终用来调用main函数)

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


推荐阅读

史海拾趣

Aerotronics Marketing Inc公司的发展小趣事

Aerotronics Marketing Inc公司注重与高校和研究机构的合作,通过产学研合作的方式推动技术创新。公司与多所知名高校建立了紧密的合作关系,共同开展无人机技术的研发和应用研究。这种合作模式不仅为公司提供了源源不断的技术支持和人才储备,还推动了整个电子行业的技术进步。

Chip Quik公司的发展小趣事

随着市场的反馈和技术的不断进步,Chip Quik公司对初始产品进行了多次优化。公司不断改进焊接材料的性能,提高焊接速度和稳定性,同时降低操作难度。这些改进使得Chip Quik的产品在电子维修领域获得了更广泛的应用,公司也逐渐扩大了市场份额。

Eurotechnique公司的发展小趣事

近年来,随着数字化和智能化的快速发展,Eurotechnique也加快了数字化转型和智能化升级的步伐。公司投入大量资金和资源,引进先进的数字化生产线和智能化设备,提高生产效率和产品质量。同时,Eurotechnique还加强了与互联网、大数据等新技术领域的合作,推动公司的数字化转型和智能化升级。这些努力使得Eurotechnique在竞争激烈的电子行业中保持了领先地位。

Altitude Technology公司的发展小趣事

随着公司的不断发展,Altitude Technology逐渐在电子行业中崭露头角。然而,市场竞争也日趋激烈,为了保持领先地位,公司决定加大研发投入,致力于技术突破。经过长时间的研发,Altitude Technology成功推出了一款采用最新芯片技术的智能手机,这款手机在性能、功耗和拍照效果等方面均达到了行业领先水平,为公司赢得了更多的市场份额。

GradConn Ltd公司的发展小趣事

在电子行业的快速发展中,GradConn也面临着诸多挑战,如市场竞争加剧、技术更新换代加速等。然而,公司凭借敏锐的市场洞察力和持续的创新精神,不断克服这些挑战,实现了持续发展。GradConn不仅关注当前的市场需求,还积极预测未来的技术趋势,提前布局新产品研发。这种前瞻性的战略眼光使GradConn能够在激烈的市场竞争中保持领先地位,并持续为客户提供优质的产品和服务。

DURAKOOL公司的发展小趣事

随着电子行业的快速发展和变革,DURAKOOL公司也面临着新的挑战和机遇。为了保持竞争力,公司不断调整战略和业务结构,积极寻求新的增长点。在这个过程中,公司开始涉足电动汽车高压继电器等新兴市场领域,并取得了显著成果。

问答坊 | AI 解惑

音乐彩灯控制器设计

好心的大哥大姐帮帮小弟吧 马上就要答辩了 谢谢大家 可以发到我的邮箱里wen3634111@sina.com…

查看全部问答>

关于逻辑中断

在CE5 中,比如现在BSP中的 keypb 已经对 EINT0中断 进行了处理。 那么可不可以 再写个驱动 对于EINT0 进行处理。调用KernelIoControl 老是失败。 static UINT32 g_EINTIrq = INTSRC_EINT0; static UINT32 g_EINTSysIntr = SYSINTR_UNDEFINED; Ke ...…

查看全部问答>

有做ARM-Linux下AD模数转换驱动的吗?

有做ARM-Linux下AD模数转换驱动的吗?遇到一些问题,想众位大侠请教!!!…

查看全部问答>

多台主机共用一台显示器 有什么好招吗

市场上卖的那个切换的叫什么东西来着?呵,第一次碰到这种问题哈,以前都是见到一台主机用多个显示器来着的。 比较急,哪位大哥可以详细的说明一下。以及设备的价格?感激不尽…

查看全部问答>

以下代码为2410 BOOTLODER中的一段,请解释一下

        IMPORT  |Image$$RO$$Base|        ; Base of ROM code         IMPORT  |Image$$RO$$Limit|  ; End of ROM code (=start of ROM data) & ...…

查看全部问答>

请热心的坛友们多多帮助新手

感觉新手发布的帖子很少被关注,新手的求助很少有人提供帮助。知道大家都很忙,但是还是请高手们挤出点时间,多帮助帮助我们这些新手。在这个充满爱心的论坛,让不管是新手还是高手,都感觉到家一样的温暖!谢谢大家!…

查看全部问答>

2812读cpld出现数据不稳定,请教

请教达人: 我设计的设备采用总线插槽的方式,除电源板、DSP板卡外还有5个扩展板卡,其中2个输出3个输入,每个板卡上均有cpld,cpld实现简单的译码功能。DSP读输入板卡时发现: 1、3块输入cpld板卡都插上时,dsp循环读各输入板卡数据,从ccs窗口 ...…

查看全部问答>

【我给XILINX资源中心做贡献】Xilinx FPGA EDK开发实例

【我给XILINX资源中心做贡献】Xilinx FPGA EDK开发实例…

查看全部问答>