![5b93f31a57054f6f6762f8779ac94868.png](https://i-blog.csdnimg.cn/blog_migrate/9c20fe1075a77012171f52554894eb00.jpeg)
讲解启动过程之前先简单了解一下内存五区:
1.栈区stack:由编译器自动分配释放,存放函数的参数值,局部变量的值。
2.堆区heap:由程序员分配和释放,若程序员不释放,程序结束时由OS回收。
3.全局区(静态区 static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量、未初始化的静态变量在相邻的另一块区域。
4.文字常量区:常量字符串就是放在这里的。
5.程序代码区 : 存放函数体的二进制代码。 话不多说先看一段代码:
int a = 0; //全局初始化区, 可以被其他c文件 extern 引用
static int ss = 0; //静态变量,只允许在本文件使用
char *p1; //全局未初始化区
void main(void)
{
int b; //栈
char s[] = "abc"; //栈
char *p2; //栈
char *p3 = "123456"; //1234560在常量区,p3在栈上。
static int c =0; //全局(静态)初始化区
p1 = (char *)malloc(10); //在堆区申请了10个字节空间
p2 = (char *)malloc(20); //在堆区申请了20个字节空间
strcpy(p1, "123456"); /* 123456字符串(结束符号是0,总长度7)放在常量区,编译器可能会
将它与p3所指向的"123456"优化成一个地方 */
}
简单的了解了内存五区之后再来看看STM32 的启动过程。
STM32 的启动过程是指从 CPU 上电复位执行第 1 条指令开始到进入 C 程序 main()函数入口之间的部分。启动过程相对来说还是比较重要的,虽然不好理解但必须了解掌握。
- 不同的系列芯片的的启动代码不同。
- 启动过程主要完成的工作:(startup_stm32xxxx.s)
![095b90a73f38146cf2385b72856a5460.png](https://i-blog.csdnimg.cn/blog_migrate/fba2299c6ec08ea7d5d4bf26d319c240.jpeg)
STM32 的启动过程,启动过程是指从 CPU 上电复位执行第 1 条指令开始(汇编文件)到进入 C 程序 main()函数入口之间的部分。启动过程相对来说还是比较重要的,虽然难但必须了解掌握。
3.打开你的工程,鼠标双击工程文件。就会出来对应的.out文件查看中断向量列表在内部flash的存储。