ARM启动流程及启动代码分析
一、ARM的启动流程 基于ARM的芯片多数为复杂的片上系统。这种复杂系统里的多数硬件模块都是可配置的。需要由软件来设置其需要的工作状态。因此在用户的应用程序之前,需要由专门的一段代码来完成对系统的初始化。由于这类代码直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。一般通用的内容包括: 中断向量表 初始化存储器系统 初始化堆栈 初始化有特殊要求的端口,设备 初始化用户程序执行环境 改变处理器模式 呼叫主应用程序 二、ARM的启动文件 以stm32的启动文件为例,stm32的启动文件一般都是包含在具体单片机型号的汇编文件中(.s文件),下图为启动文件的简述(description) 和我们预想的差不多,该启动文件主要包含了初始化堆栈、初始化程序指针(PC)、初始化中断向量表、配置系统时钟和外部Sram(可选)、跳转到main函数 三、启动文件代码具体分析 第一部分配置堆和栈的大小(Stack_size Heap_size) 如上图 AREA STACK, NOINIT, READWRITE, ALIGN=3 ;定义栈,可初始为0,8字节对齐 (堆代码类似相同功能) Stack_Mem SPACE Stack_Size ;分配0x400个连续字节,并初始化为0 (堆代码类似相同功能) __initial_sp ;汇编代码地址标号 (堆代码类似相同功能) PRESERVE8