本文档为记录自己以STM32407为媒介学习关于Cortex-M4内核及其重要外设应用的学习记录
目录
前言
启动文档解释
一、启动文件的作用
- 初始化堆栈指针SP;
- 初始化PC指针,指向复位程序;
- 初始化中断向量表;
- 配置系统时钟;
- 调用C库函数_main初始化用户堆栈;
二、一些汇编指令集
三、启动文件部分代码解释
3.1 栈Stack
- 栈的作用——局部变量,函数调用,函数形参等开销;
- 栈不能超过内部SRAM的大小。若程序变量过多,需要适当修改栈的大小;
ps:若程序出现硬fault(硬件错误)状态时,可以考虑是否栈溢出了。
3.2 堆Heap
- 堆的作用——用来进行动态内存分配,如函数malloc()申请的内存就在堆上;
3.3 向量表
- 向量表实际上是一个32位整型数组,一个元素对应一个异常(ESR),数组元素存的即为ESR的入口地址;
- 向量表在地址空间中的位置可以设置,通过NVIC中的一个重定位寄存器之处向量表的地址;
- 向量表复位后,重定位寄存器的值为0,故需要在FLASH地址0处必须包含一张向量表,用于初始时的异常分配。
向量表源码片段:
3.4 复位程序
3.5 中断服务程序
- 启动文件中已经有空的中断函数,对应的真正的中断服务程序需要在主程序中实现;
- 若在主程序中开启了某个中断,但并没有编写对应的中断服务函数,则当进入该服务函数时,程序会死在空的中断函数中。
ps: 这也说明了为什么在写中断函数时,函数名字被限定了~
3.6 用户堆栈初始化
总结
以上就是今天要讲的内容,本文仅仅简单介绍了STM32F407的启动文件。