zoukankan      html  css  js  c++  java
  • 启动文件startup_stm32f40_41xxx.s

    一、启动文件,startup_stm32f40x_41xx.s

    1、定义

    启动文件由汇编编写,是系统上电复位后第一执行的程序。

    Stack_Size      EQU     0x00000400  // 栈的大小可以调整
    
                    AREA    STACK, NOINIT, READWRITE, ALIGN=3
    Stack_Mem       SPACE   Stack_Size
    __initial_sp
    
    
    ; <h> Heap Configuration
    ;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
    ; </h>
    
    Heap_Size       EQU     0x00000200
    
                    AREA    HEAP, NOINIT, READWRITE, ALIGN=3
    __heap_base
    Heap_Mem        SPACE   Heap_Size
    __heap_limit
    
                    PRESERVE8
                    THUMB
    
    
    ; Vector Table Mapped to Address 0 at Reset
                    AREA    RESET, DATA, READONLY
                    EXPORT  __Vectors
                    EXPORT  __Vectors_End
                    EXPORT  __Vectors_Size
    
    __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
    __Vectors_End
    
    __Vectors_Size  EQU  __Vectors_End - __Vectors
    
                    AREA    |.text|, CODE, READONLY
    
    ; Reset handler
    Reset_Handler    PROC
                     EXPORT  Reset_Handler             [WEAK]
            IMPORT  SystemInit
            IMPORT  __main
    
                     LDR     R0, =SystemInit
                     BLX     R0
                     LDR     R0, =__main
                     BX      R0
                     ENDP
    
    ; Dummy Exception Handlers (infinite loops which can be modified)
    
    NMI_Handler     PROC

    2、特征

    1)初始化堆栈指针,主要是为C语言提供良好的运行环境

    2)进行复位处理,执行该Reset_Handler函数

    3)初始化向量表,中断入口地址列表

    4)配置系统的时钟,调用SystemInit

    5)调用C库函数__main进入main.c中的main函数执行

    二、异常向量表

    1、8051

    AT89S51共有5个中断源,2个外部中断、2个定时器中断、1个串口中断。

    中断入口地址
    外部中断0                             0003H
    定时器0                               000BH
    外部中断1                             0013H
    定时器1                               001BH
    串口中断                               0023H

     

    2、ARM Cortex-M4

    汇编文件当中的异常量表(中断入口地址的集合)

    ; Vector Table Mapped to Address 0 at Reset
                    AREA    RESET, DATA, READONLY
                    EXPORT  __Vectors
                    EXPORT  __Vectors_End
                    EXPORT  __Vectors_Size
    
    __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     WWDG_IRQHandler                   ; Window WatchDog                                        
                    DCD     PVD_IRQHandler                    ; PVD through EXTI Line detection                        
                    DCD     TAMP_STAMP_IRQHandler             ; Tamper and TimeStamps through the EXTI line            
                    DCD     RTC_WKUP_IRQHandler               ; RTC Wakeup through the EXTI line                       
                    DCD     FLASH_IRQHandler                  ; FLASH                                           
                    DCD     RCC_IRQHandler                    ; RCC                                             
                    DCD     EXTI0_IRQHandler                  ; EXTI Line0                                             
                    DCD     EXTI1_IRQHandler                  ; EXTI Line1                                             
                    DCD     EXTI2_IRQHandler                  ; EXTI Line2                                             
                    DCD     EXTI3_IRQHandler                  ; EXTI Line3                                             
                    DCD     EXTI4_IRQHandler                  ; EXTI Line4     
    
                   .............................    
                    EXPORT  EXTI0_IRQHandler                  [WEAK] 
    
    EXTI0_IRQHandler             //空函数    

    WEAK的关键字

    如果外部没有定义EXTI0_IRQHandler,就使用当前的EXTI0_IRQHandler。如果在外面定义了EXTI0_IRQHandler就执行外面定义好的函数。

  • 相关阅读:
    关于研发岗位怎样做新人培训
    打工人的出路
    箭头函数的副作用
    前端日志系统设计
    cocos creator3d开发插件
    linux+Docker+asp.netCore部署
    asp.net core API 3.1获取图片返回流文件
    asp.net Core API 获取ip地址
    asp.net core 3.1配置log4net
    Asp.net Core JsonWebToken记录
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10960632.html
Copyright © 2011-2022 走看看