芯片复制ARM启动过程
1.芯片复制基本概念(CMSIS): Cortex Micro-controller Software InterfaceStandard,微控制器软件接口标准。
2.CMSIS标准的文件结构:
a) core_cm.c (stdint.h)
b) system_.c (core_cm, system_)
c) startup_.s
其中core_cm.c以及core_cm中为内核设访问层,其中定义了定义了内核中得外设几丁质以及一些内核的访问及控制函数。
startup_.s文件是系统的启动文件,其包括堆和栈的初始化配置、中断向量表的配置以及将程序引导到main()函数等功能。
system_和system_.c文件则是由ARM公司提供模版,各芯片制造商根据自己芯片的特点来编写的。
3芯片复制.注解startup_.s文件
此文件主要完成三项工作:堆栈以及堆的初始化、定位中断向量表、调用Reset Handler
a) 堆栈以及堆的初始化
; Stack Configuration
; Stack Size(in Bytes) <0x0-0xFFFFFFFF:8>
;
Stack_Size EQU 0x00000200
AREA STACK, NOINIT, READWRITE,ALIGN=3
//指明8字节对齐(ALIGN=3)
Stack_Mem SPACE Stack_Size
__initial_sp //此标号有一层隐含的意思那就是在M3中堆栈是满递减堆 //栈,因为它指定了堆栈指针位于堆栈的高地址(在//Stack_Mem之后)
; Heap Configuration
; Heap Size (in Bytes)<0x0-0xFFFFFFFF:8>
;
Heap_Size EQU 0x00000000
AREA HEAP, NOINIT, READWRITE,ALIGN=3
__heap_base
Heap_Mem SPACEHeap_Size
__heap_limit
以上堆和栈的具体地址可以在工程编译后产生的*.map文件中看到。
b) 定位中断向量表
PRESERVE8
//PRESERVE8指定了以下的代码位8字节对齐
THUMB
//THUMB指定了接下来的代码为THUMB指令集
; Vector Table Mapped to Address 0 atReset
AREA RESET, DATA,READONLY
//此语句声明RESET数据段
EXPORT __Vectors
//导出向量表标号,EXPORT作用类似于C语言中的extern

芯片解密