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启动文件相关代码解释

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

  1. 临时2级页表的初始化过程 head_32.S 相关代码解释

    page_pde_offset = (__PAGE_OFFSET >> 20); /* __PAGE_OFFSET是0xc0000000,page_pde_offset = 3072 = ...

  2. 关于ARM指令中位置无关和位置相关代码的认识【转】

    本文转载自:https://blog.csdn.net/talent_CYJ/article/details/50533153 今天在一个问题上折腾了又是半天.就是在学JZ2440串口通信的时候,在s ...

  3. C51单片机头文件和启动文件

    STARTUP.A51//启动文件. 清理RAM.设置堆栈等.即执行完start.a51后跳转到.c文件的main函数 <reg51.h>  //特殊寄存器的字节地址和位地址,sfr定义字 ...

  4. HC32L110(四) HC32L110的startup启动文件和ld连接脚本

    目录 HC32L110(一) HC32L110芯片介绍和Win10下的烧录 HC32L110(二) HC32L110在Ubuntu下的烧录 HC32L110(三) HC32L110的GCC工具链和VS ...

  5. ARM Cortex M3(V7-M架构)硬件启动程序 二

    解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...

  6. 关于ARM CM3的启动文件分析

    下面以ARM Cortex_M3裸核的启动代码为例,做一下简单的分析.首先,在启动文件中完成了三项工作: 1.  堆栈以及堆的初始化 2.  定位中断向量表 3.  调用Reset Handler. ...

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

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

  8. 2.STM32启动文件

    一.概念声明 中断向量:由硬件产生的中断标识码,一般用于存放中断服务程序的跳转指令.根据硬件产生的中断号查找中断向量表来确定对应的中断向量.CM3内核有15个异常  和240个中断源.    程序的内 ...

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

    第14章     启动文件详解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ...

随机推荐

  1. gitlab+gerrit+jenkins持续集成框架

    1.持续集成之gitlab+gerrit+jenkins 1.1. GitLab 1.1.1. 简介 GitLab 是一个使用使用Ruby on Rails搭建的,用于仓库管理系统的开源项目.使用Gi ...

  2. yii2 GridView常见操作

    作者:白狼 出处:http://www.manks.top/article/yii2_gridview 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  3. w3wp.exe(IIS ) CPU 占用 100% 的常见原因及解决办法

    对于IIS 管理员来说,经常会碰到 Web 服务器 CPU 占用 100% 的情况,以下是个人的日常工作总结和一些解决办法,主要用来剖析 w3wp.exe(IIS )  占用 CPU 100% 的一些 ...

  4. Puppet权威指南

    <Puppet权威指南>基本信息作者: 王冬生 丛书名: Linux/Unix技术丛书出版社:机械工业出版社ISBN:9787111485988上架时间:2014-12-25出版日期:20 ...

  5. SQL指令中一些特别值得注意的地方

    SQL基本指令要频繁使用,要是理解错了,将来工作一定会出现很大的麻烦.今天再重新梳理一下基本的SQL语法 SQL指令 in: 这个指令,我曾经发生过把它和python中的in搞混的错误.python中 ...

  6. Linux文件I/O

    文件描述符(File Descriptor) a small, nonnegative integer for use in subsequent system calls (read(2), wri ...

  7. Ineedle驱动方式dpdk测试性能

    这次主要是测试在dpdk方案下,ineedle的处理包的性能. 发包工具: 使用立永当时写的一个发包工具:linux_pcap 做法:大概是从网上抓取了一些数据包,将源ip替换为随即ip,sip替换为 ...

  8. Kali Linux 秘籍/Web渗透秘籍/无线渗透入门

    Kali Linux 秘籍 原书:Kali Linux Cookbook 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 Github Git@OSC 目录: 第一章 安装和启动Kali ...

  9. HQL的一些语句总结

    HQL原文来自:http://slaytanic.blog.51cto.com/2057708/782175/   Slaytanic老师 关于Hadoop的介绍来自:http://www.cnblo ...

  10. myeclipse优化

    myeclipse优化 http://blog.163.com/cayyenne@126/blog/static/12186261420100611546658/