STM32启动文件初探之startup_stm32f10x_hd.s(Reset_Handler函数)
来源:互联网 发布:有道词典的网络设置 编辑:程序博客网 时间:2024/06/07 02:23
该文件主要实现目的:
- 设置初始SP
- 设置初始PC=Reset_Handler
- 设置向量表入口地址,并初始化向量表
- 调用SystemInit,把系统时钟配制成72M,SystemInit在库文件system_stm32f10.c定义
- 调转到标号_main,最终来到C程序文件
; Reset handlerReset_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 世界。
第十行表示子程序的结束。
阅读全文
0 0
- STM32启动文件初探之startup_stm32f10x_hd.s(Reset_Handler函数)
- STM32启动文件(Reset_Handler函数)
- STM32启动文件——startup_stm32f10x_hd.s
- STM32启动文件——startup_stm32f10x_hd.s
- STM32启动文件——startup_stm32f10x_hd.s
- stm32的启动文件--startup_stm32f10x_hd.s
- MDK + STM32固件库 启动文件startup_stm32f10x_hd.s功用及注释
- IAR + STM32固件库 启动文件startup_stm32f10x_hd.s功用及注释
- MDK + STM32固件库 启动文件startup_stm32f10x_hd.s功用及注释
- stm32笔记:启动代码startup_stm32f10x_hd.s注解
- stm32 启动代码startup_stm32f10x_hd.s注解
- STM32F107启动文件分析(startup_stm32f10x_hd.s)
- 移植FreeRTOS一定要修改startup_stm32f10x_hd.s的启动文件吗?
- startup_stm32f10x_hd.s启动代码分析
- ST意法半导体官方库启动文件 startup_stm32f10x_hd.s的分析
- STM32(一)之启动文件简介
- STM32 startup.s启动文件分析
- startup_stm32f10x_hd.s 讲解
- 常用逆向工具小结(1)
- Android系统架构
- centos 升级内核
- 一个程序员的进化史-第21章
- 单张图片上传,重命名和制成缩略图
- STM32启动文件初探之startup_stm32f10x_hd.s(Reset_Handler函数)
- nginx的rewrite应用案例
- 三种常见字符编码简介:ASCII、Unicode和UTF-8
- MongoDB实战-驱动与复制
- 欢迎使用CSDN-markdown编辑器
- Java集合框架
- 九度1491 求1和2的个数
- 王爽 《汇编语言》 读书笔记 十 CALL和RET指令
- Python进阶学习笔记——函数式编程之高阶函数