在前面的文章《ARM 之九 Cortex-M/R 内核 Keil(ARMCC) 程序启动流程》中已经介绍过了 Cortex-M/R 内核相关内容。这里基于 IAR 的启动流程与之前的并没有太大区别,因为这是 Cortex-M/R 内核规定好的。无论是 ARMCC 还是 IAR 都需要遵循内核的规定。区别主要在于初始化的个函数接口不同!
本文主要内容来自于 IAR 的官方文档《IAR C/C++ Development Guide Compiling and Linking》,在翻译了部分功能的基础上添加了一些自己的理解!
启动流程
嵌入式应用程序的执行,分为三个阶段:
- 初始化阶段
- 执行阶段
- 退出阶段
初始化阶段
在系统启动期间,进入 main()
函数之前执行初始化序列。 初始化序列处理目标硬件和 C/C++ 运行环境所需的初始化。初始化是在应用程序(CPU 复位)启动但是进入用户的 main()
函数之前来执行的。初始化阶段可以简单地分为:
-
硬件初始化,通常至少初始化堆