[ARM] Cortex-M Startup.s启动文件相关代码解释

1. 定义一个段名为CSTACK, 这里:

NOROOT表示如何定义的段没有被关联,那么同意会被优化掉,如果不想被优化掉就使用ROOT.

后面的括号里数字表示如下:

(1):这个段是2的1次方即2字节对齐

(2):这个段是2的2次方即4字节对齐

(3):这个段是2的3次方即8字节对齐

SECTION CSTACK:DATA:NOROOT(2)

2. 下面代码表示执行后面的指令函数(我理解为函数~),指令函数_iar_program_start和SystemInit为系统定义好的,在C库启动代码中。

SystemInit:完成系统的初始化,自带的模块,主要是设置系统的时钟。

__iar_program_start:这个函数是在启动代码中 \arm\src\lib\thumb\下面的代码中找到,是系统自带的启动模块

EXTERN __iar_program_start
EXTERN SystemInit

3. PUBLIC 表示导出标号。外部可以使用

符号 __vector_table 是有特殊意义的,所以必须注意添加进去
    ; The vector table is normally located at address 0.
    ; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
    ; The name “__vector_table” has special meaning for C-SPY:
    ; it is where the SP start value is found, and the NVIC vector
    ; table register (VTOR) is initialized to this address if != 0.

PUBLIC _vector_table

4. 通过 SFE 运算得到改段的结束地址,注意这个运算是在link的时候完成。所以IAR 的处理办法就是先定义一个block作为堆栈区,然后将堆栈指针放到这个block的末端

剩下的就是各个中断向量

        DATA
__vector_table
        DCD sfe(CSTACK)
        DCD Reset_Handler ; Reset Handler
        ......

5. 首先,因为之前是DATA模式,所以这里先切换回THUMB模式。

PUBWEAK: PUBLIC WEAK

如果程序员在自己的代码中定义了后面声明的中断处理函数(如这里的NMI_Hander),那么在本文件中系统自带的中断处理函数无效,如果程序员没有自定义,则执行本文件的处理函数。

        THUMB

        PUBWEAK Reset_Handler
        SECTION .text:CODE:REORDER(2)
Reset_Handler
        LDR R0, =SystemInit
        BLX R0
        LDR R0, =__iar_program_start
        BX R0

        PUBWEAK NMI_Handler
        SECTION .text:CODE:REORDER(1)
NMI_Handler
        B NMI_Handler

未经允许不得转载:浩瀚先森 » [ARM] Cortex-M Startup.s启动文件相关代码解释

时间: 2024-10-19 17:49:17

[ARM] Cortex-M Startup.s启动文件相关代码解释的相关文章

Tomcat7源码分析学习系列之一-----tomcat的启动文件startup的注释

1. Windows系统,tomcat启动文件startup.bat @echo off rem 关闭回显,不显示下面的命令:rem Licensed to the Apache Software Foundation (ASF) under one or morerem contributor license agreements. See the NOTICE file distributed withrem this work for additional information rega

关于ARM CM3的启动文件分析

下面以ARM Cortex_M3裸核的启动代码为例,做一下简单的分析.首先,在启动文件中完成了三项工作: 1.  堆栈以及堆的初始化 2.  定位中断向量表 3.  调用Reset Handler. 在介绍之前,我们先了解一下ARM芯片启动文件中涉及到的一些汇编指令的用法. 补充一下,其中DCD相当于C语言当中的&,定义地址. 1.堆栈以及堆的初始化 1.1 堆栈的初始化 Startup_xxx.s中的堆栈初始化代码 Stack_Size  EQU  0x00000400,这个语句相当于Stac

启动文件讲解

本章参考资料< STM32F4xx 中文参考手册>第十章-中断和事件:表 46.STM32F42xxx 和 STM32F43xxx 的向量表: MDK 中的帮助手册-ARM Development Tools:用来查询 ARM 的汇编指令和编译器相关的指令. 启动文件由汇编编写,是系统上电复位后第一个执行的程序.主要做了以下工作:1. 初始化堆栈指针 SP=_initial_sp2. 初始化 PC 指针=Reset_Handler3. 初始化中断向量表4. 配置系统时钟5. 调用 C 库函数_

第14章 启动文件详解—零死角玩转STM32-F429系列

第14章     启动文件详解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料<STM32F4xx 中文参考手册>第十章-中断和事件:表 46. STM32F42xxx 和 STM32F43xxx 的向量表:MDK中的帮助手册—ARM Development Tools:用来查询ARM的汇编指令和编译器相关的指令. 14.1 启动文件简介 启动文件由汇编编写,是

第14章 启动文件详解

第14章     启动文件详解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料<STM32F4xx 中文参考手册>第十章-中断和事件:表 46. STM32F42xxx 和 STM32F43xxx 的向量表:MDK中的帮助手册-ARM Development Tools:用来查询ARM的汇编指令和编译器相关的指令. 14.1 启动文件简介 启动文件由汇编编写,是

10G R2 参数文件相关

CLUSTER_DATABASE Property Description Parameter type Boolean Default value false Modifiable No Range of values true | false Basic Yes Real Application Clusters For all instances, the value must be set to TRUE. CLUSTER_DATABASE is a Real Application C

DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)(对数据库进行各种维护操作)

2014-08-07 BaoXinjian 一.摘要 Oracle数据库的完整启动过程是分步骤完成的,包含以下3个步骤: 启动实例-->加载数据库-->打开数据库 因为Oracle数据库启动过程中不同的阶段可以对数据库进行不同的维护操作,对应我们不同的需求,所以就需不同的模式启动数据库. 1. Oracle启动需要经历四个状态:SHUTDOWN .NOMOUNT .MOUNT .OPEN 2. Oracle关闭的四种方式:Normal, Immediate, Transactional, Ab

ARM Cortex-M底层技术(2)—启动代码详解

杂谈 工作了一天,脑袋比较乱.一直想把底层的知识写成一个系列,希望可以坚持下去.为什么要写底层的东西呢?首先,工作用到了这部分内容,最近和内部Flash打交道比较多,自然而然会接触到一些底层的东西:第二,近些年来Cortex-M阵营各厂商(ST.Nordic.ATMEL……)对新产品的迭代速度越来越快,以及微控制器应用普及程度的加深,越来越多的开发者把更多精力投注在应用层开发上,花在对底层技术上的时间越来越少,更深层次的原因是走嵌入式底层没有做互联网上层赚钱.希望自己可以把嵌入式ARM Cort

u-boot start.S启动文件分析

u-boot start.S启动文件分析 u-bootstart.SBL1 u-boot start.S启动文件分析 一.start.S来源 1.为何要分析start.S 2.start.S的来源 3.头文件包含 二.start.S分析 1.Start.S分析 16字节校验头 异常向量表 16字节内存对齐 设置CPU为SVC模式 L2 cache操作 Invalidate L1 I/D 关掉MMU 读取启动引脚信息 第一次设置栈 ./board/samsung/x210/lowlevel_ini