关闭
搜索
搜索
本版
帖子
用户
热搜:
程序员
简洁模式
高级模式
用户组: 游客
消息
提醒
新听众
我关注的
帖子
道具
勋章
任务
设置
退出
请
登录
后使用快捷导航
没有帐号?
立即注册
设为首页
收藏本站
开启辅助访问
切换到窄版
登录
or
立即注册
快捷导航
搜索
首页
论坛
BBS
MCU单片机技术
程序员交流
STM32教程(六)HAL库之STM32启动文件详细分析!
[复制链接]
作者:
admin
版块:
›
MCU单片机技术
›
stm
发布时间:
2018-6-8 15:01:33
1440
0
返回列表
admin
当前离线
管理员
管理员
积分
1851
发消息
楼主
电梯直达
admin
发表于 2018-6-8 15:01:33
|
只看该作者
|
倒序浏览
|
阅读模式
今天介绍下STM32 的启动文件分析,所谓的启动文件,就和我们PC开机进入系统之前运行的BIOS程序类似,主要是对硬件设备系统进行的最初的配置。
我们以STM32F407系列为例,启动文件为startup_stm32f407xx.s,打开文件可以看到如下介绍:
启动文件主要完成如下过程,即程序执行过程:
-设置堆栈指针SP=_initial_sp
-设置PC指针=Reset_Handler
-配置系统时钟
-配置外部SRAM用于程序变量等数据存储(可选)
-跳转到C库的_main,最终调用我们自己写的main()函数
具体一点的过程大致如下:
硬件复位之后,CPU 内的时序逻辑电路首先将 0x0800 0000 位置存放的堆栈栈顶地址装入 SP 寄存器。紧接着将 0x0800 0004 位置存放的向量地址装入 PC 程序计数器。CPU 从 PC 寄存器指向的物理地址取出第 1 条指令开始执行程序,也就是开始执行复位中断服务程序 Reset_Handler.
复位中断服务程序会调用 SystemInit()函数(C 语言的) 来配置系统时钟、配置 FSMC 总线上的外部SRAM,然后跳转到 C 库中__main 函数。由 C 库中的__main 函数完成用户程序的初始化工作(比如:变量赋初值等),最后由__main 函数调用用户写的 main()函数开始执行 C 程序。
明白了启动文件的作用和工作流程后,如果我们在以后的项目中需要修改启动文件中的参数(很少会),我们得明白启动文件中那些常见的汇编指令:我给大家标识出来,供大家查阅
EQU 是表示宏定义的伪指令,类似于 C 语言中的#define
STACK :表示这个段的名字,可以任意命名
NOINIT:表示此数据段不需要填入初始数据
READWRITE:表示此段可读可写
ALIGN=3 :表示首地址按照 2 的 3 次方对齐,也就是按照 8 字节对齐
__heap_base 表示堆的开始地址
__heap_limit 表示堆的结束地址
AREA 定义一块代码段,只读,段名字是 RESET
READONLY 表示只读,缺省就表示代码段了
DCD 表示分配 1 个 4 字节的空间。每行 DCD 都会生成一个 4 字节的二进制代码。中断向量表存放的实际上是中断服务程序的入口地址。当异常(也即是中断事件)发生时,CPU 的中断系统会将相应的入口地址赋值给 PC 程序计数器,之后就开始执行中断服务程序。
WEAK 声明其他的同名标号优先于该标号被引用,就是说如果外面声明了的话会调用外面的
利用 PROC、ENDP 这一对伪指令把程序段分为若干个过程,使程序的结构加清晰。
IMPORT:伪指令用于通知编译器要使用的标号在其他的源文件中定义
SystemInit 函数在文件 system_stm32f4xx.c 里面
最后通过__main 标号进入C/C++标准实时库函数里的一个初始化子程序__main 的入口地址,再经过一些初始化之后才正式进入我们自己写的C语言的main函数。
下期讲解STM32 HAL库串口的使用。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
立即注册
收藏
0
相关帖子
•
Python编程语言知多少?
•
AMD推出v6合订版Linux补丁以更好地应对PSF预测性存储转发安全隐患
•
干货|深度剖析C语言的main函数
•
红帽linux[基础命令]特殊变量列表
•
如何在内核中操作某个文件?
•
利用BATS测试Bash脚本和库|Linux中国
•
java013:JDK,JRE,JVM之间的关系
•
第40天.计算机病毒
•
欲学鸿蒙必先懂Linux:逐项分析Linux目录树的5类18项构成
•
《Linux内核编码风格》官方手册最新中译本
回复
使用道具
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
表情
@朋友
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
其他嵌入式相关
快速回复
返回顶部
返回列表