首页 理论教育ARMCortex-M4嵌入式系统处理器启动文件

ARMCortex-M4嵌入式系统处理器启动文件

【摘要】:处理器启动文件通常由厂家提供,对于以ARM Cortex-M4为内核的STM32F4处理器来说,在Keil μVisi/On集成开发环境下的启动文件为startup_stm32f40_41×××.s。启动文件采用ARM汇编程序设计,主要源程序如下:通过阅读上述启动文件,可以了解到Cortex-M4处理器的启动文件主要完成了堆栈初始化、复位事件处理初始化、异常向量表初始化等工作,并调用C函数库的__main函数进入基于C语言的主文件中。因此,该启动文件仅能反映系统启动时的主要流程,不能体现其内部的具体操作。

当前的嵌入式应用程序开发过程,C语言成了绝大部分场合的最佳选择。因此,main()函数成了程序执行的起点——因为C程序从main()函数开始执行。但是,一个经常会被忽略的问题是微控制器上电后如何寻找并执行main()函数?微控制器无法从硬件上定位main()函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址由编译器在编译时自行分配,即main()函数的入口地址在微控制器的内部存储空间中不再是绝对不变的。

因此,每种微控制器都必须有启动文件(Bootloader),其作用是负责执行微控制器从“复位”到“开始执行main()函数”这段时间(称为启动过程)所必须进行的工作。

处理器启动文件通常由厂家提供,对于以ARM Cortex-M4为内核的STM32F4处理器来说,在Keil μVisi/On集成开发环境(Integrated Development Environment,IDE)下的启动文件为startup_stm32f40_41×××.s(版本号V1.4.0)。启动文件采用ARM汇编程序设计,主要源程序如下:(www.chuimin.cn)

通过阅读上述启动文件,可以了解到Cortex-M4处理器的启动文件主要完成了堆栈初始化、复位事件处理初始化、异常向量表初始化等工作,并调用C函数库的__main函数进入基于C语言的主文件中。同时,在复位后,Cortex-M4处理器进入线程模式、特权级,且使用主堆栈指针(MSP)。

此外,启动文件中输入了多个全局标号,表示将会调用多个其他文件中的程序段来完成启动过程。因此,该启动文件仅能反映系统启动时的主要流程,不能体现其内部的具体操作。读者如果有兴趣,可以根据所述全局标号,在固件库中寻找其具体内容并深入理解启动全过程。