ARM启动过程(Cortex-M3 NXP LPC1768为例)
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
//指明8字节对齐(ALIGN=3)
Stack_Mem SPACE
__initial_sp
; Heap Configuration
;
;
Heap_Size
__heap_base
Heap_Mem
__heap_limit
以上堆和栈的具体地址可以在工程编译后产生的*.map文件中看到。
b) 定位中断向量表
PRESERVE8
//PRESERVE8指定了以下的代码位8字节对齐
THUMB
//THUMB指定了接下来的代码为THUMB指令集
; Vector Table Mapped to Address 0 at Reset
//此语句声明RESET数据段
//导出向量表标号,EXPORT作用类似于C语言中的extern
__Vectors
c) 调用Reset Handler
; Reset Handler
Reset_Handler
PROC
注释:引导程序进入__main(此__main是C_Library中的函数,非main())
d) 其他的代码
这段代码是NXP公司的LPC1700系列的MCU特有的一段代码,其他公司的Cortex-M3 MCU的启动程序是没有这段代码的。
这段代码是指定LPC1700的CRP加密级别的代码段,芯片上电后会自动读取这一地址的值以确定加密方式,其中CRP_Key = 0xffffffff为不加密(0级加密),CRP_Key = 0x12345678为1级加密,CRP_Key = 0x87654321为2级加密,CRP_Key = 0x43218765为3级加密(最高级加密),3级加密将会禁止所有的ISP指令,也就是说,芯片将不能读写、不能擦除。
CRP_Key
DCD
e)
; User Initial Stack & Heap
ARM启动过程Cortex-M3LPC176 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)