Cortex-M3 .s文启动文件分析

发布者:Lihua521最新更新时间:2014-12-31 来源: 51hei关键字:Cortex-M3  启动文件 手机看文章 扫描二维码
随时随地手机看文章

1. 基本概念(CMSIS): Cortex Micro-controller Software Interface Standard,微控制器软件接口标准。

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        SPACE Heap_Size
__heap_limit
以上堆和栈的具体地址可以在工程编译后产生的*.map文件中看到。
b) 定位中断向量表
PRESERVE8   //PRESERVE8指定了以下的代码位8字节对齐
THUMB //THUMB指定了接下来的代码为THUMB指令集
; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY   //此语句声明RESET数据段
                EXPORT  __Vectors
//导出向量表标号,EXPORT作用类似于C语言中的extern
__Vectors                       DCD     __initial_sp                       ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
                DCD     BusFault_Handler           ; Bus Fault Handler
                DCD     UsageFault_Handler         ; Usage Fault Handler
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     SVC_Handler                ; SVCall Handler
                DCD     DebugMon_Handler           ; Debug Monitor Handler
                DCD     0                          ; Reserved
                DCD     PendSV_Handler             ; PendSV Handler
                DCD     SysTick_Handler            ; SysTick Handler
                ; External Interrupts
                DCD     WDT_IRQHandler             ; 16: Watchdog Timer
                DCD     TIMER0_IRQHandler          ; 17: Timer0
                DCD     TIMER1_IRQHandler          ; 18: Timer1
                DCD     TIMER2_IRQHandler          ; 19: Timer2
                DCD     TIMER3_IRQHandler          ; 20: Timer3
                DCD     UART0_IRQHandler           ; 21: UART0
 (……省略)
c) 调用Reset Handler
; Reset Handler


Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  SystemInit
                IMPORT  __main
                LDR     R0, =SystemInit
                BLX     R0
                LDR     R0, =__main
                BX      R0
                ENDP
注释:引导程序进入__main(此__main是C_Library中的函数,非main())
 
d) 堆栈以及堆的初始化行为
; User Initial Stack & Heap
                IF       :DEF:__MICROLIB
                EXPORT  __initial_sp
                EXPORT  __heap_base
                EXPORT  __heap_limit
                ELSE
                IMPORT  __use_two_region_memory
                EXPORT  __user_initial_stackheap
__user_initial_stackheap
                LDR      R0, =  Heap_Mem
                LDR      R1, = (Stack_Mem + Stack_Size)
                LDR      R2, = (Heap_Mem +  Heap_Size)
                LDR      R3, = Stack_Mem
                BX       LR
e) ARM m3 C是怎么调用startup.s文件的?
startup.s大部分内容不是被C调用的,而是在C程序之前运行的。m3上电之后会先从0地址处读取MSP,然后从0x4地址处读取复位向量,接着跳转到复位异常服务程序Reset_Handler(这些是m3内核自动做的,不需要编程)。如果你用MDK的话,在工程设置Debug下的run to main()上的勾去掉,然后进入调试,你会发现你运行的第一句就是Reset_Handler的第一句。
Reset_Handler就是在startup.s中定义的,它一般会对系统初始化,然后进入main函数。
向量表也是在startup.s中定义的,至于为什么程序编译之后向量表一定在0地址处,是因为向量表的前面会有类似AREA    RESET, CODE, READONLY的声明。在MDK生成的分散加载文件中,RESET被设置在flash的0地址处,这样就规定了向量表的地址。

关键字:Cortex-M3  启动文件 引用地址:Cortex-M3 .s文启动文件分析

上一篇:基于单片机、DS1302、DS1602的电子时钟
下一篇:使用IAR6.1调试LPCXpresso-cn

推荐阅读最新更新时间:2024-03-16 13:50

东芝基于Arm Cortex-M3且具备先进功能的低功耗微控制器
东京-- 东芝电子元件及存储装置株式会社(“东芝”)面向消费设备和工业设备推出“M3H族”微控制器,成功扩大其基于Arm® Cortex®-M的“TXZ™系列”微控制器的产品阵容。 该新微控制器目前已批量生产。 根据产品功能,M3H族分为两个产品组。“M3H族(1)”提供标准功能,而“M3H族(2)”提供更多封装和存储容量选项,并支持高速处理器(80MHz)。两个产品组共提供13种丰富的封装选项(32引脚至144引脚)和32KB-512KB的闪存。 M3H族基于全球标准的Arm Cortex-M3内核,专为电机控制而设计,可满足消费设备和工业设备的各种需求。M3H族(1)的工作频率高达40MHz;M3H族(2)的工作频率高达80
[工业控制]
东芝基于Arm <font color='red'>Cortex-M3</font>且具备先进功能的低功耗微控制器
C指针+ STM32 理解
环境:IAR + Cortex-M3的处理器 关注:指针在寄存器层次上的存储、调用等。。。 推荐:让你不再害怕指针 存储: 示例代码如下: int yyy=16; int *ptr1 = int **ptr2 = &ptr1; int (*ptr3) ; int *(*ptr4) ; int main() { ................ //使用这几个变量 ................. return 0; } IAR--View--Statics显示的全局区(静态区)情况: 以ptr2来说,定义:int **ptr2 = &ptr1; 从上图可知,指针变量ptr2的类型,
[单片机]
C指针+ STM32 理解
ARM Cortex-M3的嵌入式网络播放系统设计应用
ARM Cortex-M3的嵌入式网络播放系统设计应用 随着网络应用的普及,为普通嵌入式系统增加网络功能,能更好满足消费者对网络资源的需求。这里采用基于ARM Cortex-M3的微控制器LM3S1138实现一种具备网络功能的播放终端系统,该系统不仅具有良好的播放效果,还可从网络音乐服务器上点播音乐并实时播放。 1 网络播放系统的设计方案 该网络播放系统由服务器、用户终端和音响设备组成。其中,服务器通过以太网提供音乐资源,用户终端通过网络下载音频数据再实现音频解码,音响设备实现音乐播放。图1给出该系统设计框图。 该系统设计采用基于ARM Cortex-M3的控制器LM3Sll38作为主控制器。该控制器改进了代码密度,减少中断延
[单片机]
ARM <font color='red'>Cortex-M3</font>的嵌入式网络播放系统设计应用
ARM架构—— Cortex-M3与Cortex-M4特点概述
一、处理器和微控制器差别 微控制器包含处理器,处理器只是其中一小部分,具体包含存储器、时钟生成、分配逻辑、系统总线以及外设(I/O接口单元、通信接口、定时器、ADC、DAC等等),如图1-1所示: 图 1一1微控制架构 即使处理器相同,但是不同芯片厂商根据不同的应用场景选择不同的特性模块就能设计出不同特性的微控制器。 二、Cortex-M3与Cortex-M4特点 Cortex-M3与Cortex-M4处理器均使用32位架构,寄存器组中的内部寄存器、数据通路以及总线接口都是32位。Cortex-M处理器使用的指令集架构(ISA)为Thumb ISA,基于Thumb-2技术并同时支持16位和32位指令。 异同点:
[单片机]
ARM架构—— <font color='red'>Cortex-M3</font>与Cortex-M4特点概述
基于Cortex-M3的MP3播放器设计
引言 STM32 系列微控制器采用 ARM 公司最新的 Cortex —M3内核。VSl003音频解码芯片为VSlOxx系列的第三代产品,是芬兰VLSI Solution公司生产的单片MP3/WMA/MIDI解码和ADPCM编码芯片。本文采用STM32系列微控制器,结合解码芯片VSl003、SD 卡、 LCD 等外围设备设计并实现了MP3播放器。其主要功能有:播放VSl003支持的所有音频文件,如MP3、WMA、WAV文件,且音质非常好;通过摇杆控制播放上一首/下一首、音量增减等;通过LCD显示歌曲名字和播放状态;本系统还实现了读卡器功能,PC机可通过 USB 接口直接对开发板上的SD卡进行读写操作,以方便拷贝音频文件。 1 S
[单片机]
基于<font color='red'>Cortex-M3</font>的MP3播放器设计
stm32启动文件ld md hd cl vl xl分析及选择
说的直白点就是以下区别,在选择启动文件的时候有选择性区别! startup_stm32f10x_cl.s 互联型的STM32F105xx,STM32F107xx startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_hd_vl.s 大容量的STM32F100xx startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_ld_vl.s 小容量的STM32F100xx startup_stm32f10x_md.s 中容量的S
[单片机]
stm32<font color='red'>启动文件</font>ld md hd cl vl xl分析及选择
本土公司杀入MCU:兆易创新发多款ARM Cortex-M3 MCU
GigaDevice (兆易创新)在中国发布14款基于ARM Cortex-M3内核的GD32F103系列32位通用MCU产品。目前,该系列产品已经开始提供样片。GD32系列MCU力争为用户带来优异的系统性能与灵活的应用体验,并在性价比上做得更为出众。为了给用户在研发时有更大的自由选择范围,全新的GD32F103产品线提供从16KB到128KB的Flash容量,并有QFN36、TQFP48、LQFP64和LQFP100多种封装选择。系列产品在软件和引脚封装方面全兼容。 GD32F103系列产品主频为108MHz,提供了出色的处理性能。目前片内闪存(Flash)最大为128KB,RAM最大为20KB,供电电压范围为2.6V-3.
[单片机]
Cortex - M3与Cortex - M4对比
本文主要从 M3和M4的MPU、DSP能力、debug调试和电源管理4个方面说明两者的区别。 1. 内存保护单元MPU 与Cortex - M3的相同,MPU是一个Cortex - M4中用于内存保护的可选组件。处理器支持标准ARMv7内存保护系统结构模型。您可以使用在MPU执行 特权/访问 规则,或者独立的进程。这个MPU提供全面支持: l 保护区 l 重叠保护区域,提升区域优先级(7 =最高优先级,0 =最低优先级) l 访问权限 l 将存储器属性输出至系统 2 .DSP能力 下图展示了处理器运行在相同的速度下Cortex - M3和Cortex - M4在数字信号处理能力
[单片机]
Cortex - M3与Cortex - M4对比
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved