zoukankan      html  css  js  c++  java
  • [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:这个函数是在启动代码中 armsrclib humb下面的代码中找到,是系统自带的启动模块

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

  • 相关阅读:
    [置顶] 一个懦弱的IT人
    Android ListView的理解(一)
    不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数
    http-使用get和post方式提交数据
    ILOG的一个基本应用——解决运输问题、转运问题
    原生js获取execl里面的值 主要使用ActiveXObject
    (顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)
    HDU 3032 Nim or not Nim? (sg函数)
    Hadoop入门实践之从WordCount程序说起
    仅复制备份(简单恢复模式)
  • 原文地址:https://www.cnblogs.com/harleygwak1206/p/5501110.html
Copyright © 2011-2022 走看看