• STM32 启动代码startup_stm32f10x_hd.s注解


    ;******************** (C) COPYRIGHT 2010 STMicroelectronics
    ********************
    ;* File Name : startup_stm32f10x_hd.s
    ;* Author : MCD
    Application Team
    ;* Version : V3.4.0
    ;* Date :
    10/15/2010


    Stack_Size EQU 0x00000400                    
    //定义1KB大小的栈空间

    AREA STACK, NOINIT, READWRITE, ALIGN=3
    //定义一个段,8(2的3次方)字节对齐 的空间作为栈
    Stack_Mem SPACE Stack_Size                  
    //开辟栈大小1KB,并用0填充
    __initial_sp                                              
      //标记栈顶地址

    Heap_Size EQU 0x00000200                    
    //定义堆大小512字节

    AREA HEAP, NOINIT, READWRITE, ALIGN=3
    //定义堆空间,8字节对齐
    __heap_base                                 //堆空间基址
    Heap_Mem
    SPACE Heap_Size          //开辟堆空间512字节,并清0
    __heap_limit                      
                //堆空间结束地址

    PRESERVE8 //设置这个文件告诉编译器链接时堆栈是8字节对齐
    THUMB
    //开始使用thumb指令模式


    ; Vector Table Mapped to Address 0 at Reset
    复位后,中断向量表映射到地址0
    AREA RESET, DATA, READONLY
    //定义名为RESET的只读段,这个名称最好不要乱改,不分大小写,
    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 第16个开始是外设的中断
    DCD WWDG_IRQHandler ;
    Window Watchdog
    DCD PVD_IRQHandler ; PVD through EXTI Line detect
    DCD
    TAMPER_IRQHandler ; Tamper
    DCD RTC_IRQHandler ; RTC
    DCD FLASH_IRQHandler ;
    Flash
    DCD RCC_IRQHandler ; RCC
    DCD EXTI0_IRQHandler ; EXTI Line 0
    DCD
    EXTI1_IRQHandler ; EXTI Line 1
    DCD EXTI2_IRQHandler ; EXTI Line 2
    DCD
    EXTI3_IRQHandler ; EXTI Line 3
    DCD EXTI4_IRQHandler ; EXTI Line 4
    DCD
    DMA1_Channel1_IRQHandler ; DMA1 Channel 1
    DCD DMA1_Channel2_IRQHandler ; DMA1
    Channel 2
    DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3
    DCD
    DMA1_Channel4_IRQHandler ; DMA1 Channel 4
    DCD DMA1_Channel5_IRQHandler ; DMA1
    Channel 5
    DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6
    DCD
    DMA1_Channel7_IRQHandler ; DMA1 Channel 7
    DCD ADC1_2_IRQHandler ; ADC1 &
    ADC2
    DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX
    DCD
    USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0
    DCD
    CAN1_RX1_IRQHandler ; CAN1 RX1
    DCD CAN1_SCE_IRQHandler ; CAN1 SCE
    DCD
    EXTI9_5_IRQHandler ; EXTI Line 9..5
    DCD TIM1_BRK_IRQHandler ; TIM1
    Break
    DCD TIM1_UP_IRQHandler ; TIM1 Update
    DCD TIM1_TRG_COM_IRQHandler ;
    TIM1 Trigger and Commutation
    DCD TIM1_CC_IRQHandler ; TIM1 Capture
    Compare
    DCD TIM2_IRQHandler ; TIM2
    DCD TIM3_IRQHandler ; TIM3
    DCD
    TIM4_IRQHandler ; TIM4
    DCD I2C1_EV_IRQHandler ; I2C1 Event
    DCD
    I2C1_ER_IRQHandler ; I2C1 Error
    DCD I2C2_EV_IRQHandler ; I2C2 Event
    DCD
    I2C2_ER_IRQHandler ; I2C2 Error
    DCD SPI1_IRQHandler ; SPI1
    DCD
    SPI2_IRQHandler ; SPI2
    DCD USART1_IRQHandler ; USART1
    DCD
    USART2_IRQHandler ; USART2
    DCD USART3_IRQHandler ; USART3
    DCD
    EXTI15_10_IRQHandler ; EXTI Line 15..10
    DCD RTCAlarm_IRQHandler ; RTC Alarm
    through EXTI Line
    DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend
    DCD
    TIM8_BRK_IRQHandler ; TIM8 Break
    DCD TIM8_UP_IRQHandler ; TIM8 Update
    DCD
    TIM8_TRG_COM_IRQHandler ; TIM8 Trigger and Commutation
    DCD TIM8_CC_IRQHandler
    ; TIM8 Capture Compare
    DCD ADC3_IRQHandler ; ADC3
    DCD FSMC_IRQHandler ;
    FSMC
    DCD SDIO_IRQHandler ; SDIO
    DCD TIM5_IRQHandler ; TIM5
    DCD
    SPI3_IRQHandler ; SPI3
    DCD UART4_IRQHandler ; UART4
    DCD UART5_IRQHandler ;
    UART5
    DCD TIM6_IRQHandler ; TIM6
    DCD TIM7_IRQHandler ; TIM7
    DCD
    DMA2_Channel1_IRQHandler ; DMA2 Channel1
    DCD DMA2_Channel2_IRQHandler ; DMA2
    Channel2
    DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3
    DCD
    DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5
    __Vectors_End
    ;以上即中断函数指针数组

    __Vectors_Size EQU __Vectors_End - __Vectors
    ;计算中断向量表长度

    AREA |.text|, CODE, READONLY ;定义只读代码段

    ; Reset handler
    ;复位中断服务的入口
    Reset_Handler PROC ;PROC_ENDP是一个函数的开始与结束标记
    EXPORT Reset_Handler
    [WEAK];声明复位中断向量为全局的,可供外部调用,WEAK标记本代码是备用编译
    IMPORT __main
    ;导入c库中的main标号,这个是c库中的内容,不是我们自己写的那个main函数
    IMPORT SystemInit
    ;导入SystemInit
    LDR R0, =SystemInit
    BLX R0 ;跳到SystemInit
    LDR R0, =__main
    ;装载链接器添加的_mian代码,用来进行flash到ram的存储器映射与数据段拷贝并清0
    BX R0
    ;它还执行了lib_init等c库的初始化工作,完了之后再进入用户的mian函数
    ENDP

    ; Dummy Exception
    Handlers (infinite loops which can be modified)

    NMI_Handler
    PROC
    EXPORT NMI_Handler [WEAK]
    B .
    ;weak标记说明,如果使用这个备用的函数(外部文件中没有NMI_Handler),这里的B指令用nop替换,
    ENDP
    ;也就是说让编译器忽略,外部找不到任何NMI_Handler函数时的警告或错误
    HardFault_Handler\
    PROC
    EXPORT
    HardFault_Handler [WEAK]
    B .
    ENDP
    MemManage_Handler\
    PROC
    EXPORT
    MemManage_Handler [WEAK]
    B .
    ENDP
    BusFault_Handler\
    PROC
    EXPORT
    BusFault_Handler [WEAK]
    B .
    ENDP
    UsageFault_Handler\
    PROC
    EXPORT
    UsageFault_Handler [WEAK]
    B .
    ENDP
    SVC_Handler PROC
    EXPORT
    SVC_Handler [WEAK]
    B .
    ENDP
    DebugMon_Handler\
    PROC
    EXPORT
    DebugMon_Handler [WEAK]
    B .
    ENDP
    PendSV_Handler PROC
    EXPORT
    PendSV_Handler [WEAK]
    B .
    ENDP
    SysTick_Handler PROC
    EXPORT
    SysTick_Handler [WEAK]
    B .
    ENDP

    Default_Handler PROC

    EXPORT
    WWDG_IRQHandler [WEAK]
    EXPORT PVD_IRQHandler [WEAK]
    EXPORT
    TAMPER_IRQHandler [WEAK]
    EXPORT RTC_IRQHandler [WEAK]
    EXPORT
    FLASH_IRQHandler [WEAK]
    EXPORT RCC_IRQHandler [WEAK]
    EXPORT
    EXTI0_IRQHandler [WEAK]
    EXPORT EXTI1_IRQHandler [WEAK]
    EXPORT
    EXTI2_IRQHandler [WEAK]
    EXPORT EXTI3_IRQHandler [WEAK]
    EXPORT
    EXTI4_IRQHandler [WEAK]
    EXPORT DMA1_Channel1_IRQHandler [WEAK]
    EXPORT
    DMA1_Channel2_IRQHandler [WEAK]
    EXPORT DMA1_Channel3_IRQHandler
    [WEAK]
    EXPORT DMA1_Channel4_IRQHandler [WEAK]
    EXPORT
    DMA1_Channel5_IRQHandler [WEAK]
    EXPORT DMA1_Channel6_IRQHandler
    [WEAK]
    EXPORT DMA1_Channel7_IRQHandler [WEAK]
    EXPORT ADC1_2_IRQHandler
    [WEAK]
    EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK]
    EXPORT
    USB_LP_CAN1_RX0_IRQHandler [WEAK]
    EXPORT CAN1_RX1_IRQHandler [WEAK]
    EXPORT
    CAN1_SCE_IRQHandler [WEAK]
    EXPORT EXTI9_5_IRQHandler [WEAK]
    EXPORT
    TIM1_BRK_IRQHandler [WEAK]
    EXPORT TIM1_UP_IRQHandler [WEAK]
    EXPORT
    TIM1_TRG_COM_IRQHandler [WEAK]
    EXPORT TIM1_CC_IRQHandler [WEAK]
    EXPORT
    TIM2_IRQHandler [WEAK]
    EXPORT TIM3_IRQHandler [WEAK]
    EXPORT
    TIM4_IRQHandler [WEAK]
    EXPORT I2C1_EV_IRQHandler [WEAK]
    EXPORT
    I2C1_ER_IRQHandler [WEAK]
    EXPORT I2C2_EV_IRQHandler [WEAK]
    EXPORT
    I2C2_ER_IRQHandler [WEAK]
    EXPORT SPI1_IRQHandler [WEAK]
    EXPORT
    SPI2_IRQHandler [WEAK]
    EXPORT USART1_IRQHandler [WEAK]
    EXPORT
    USART2_IRQHandler [WEAK]
    EXPORT USART3_IRQHandler [WEAK]
    EXPORT
    EXTI15_10_IRQHandler [WEAK]
    EXPORT RTCAlarm_IRQHandler [WEAK]
    EXPORT
    USBWakeUp_IRQHandler [WEAK]
    EXPORT TIM8_BRK_IRQHandler [WEAK]
    EXPORT
    TIM8_UP_IRQHandler [WEAK]
    EXPORT TIM8_TRG_COM_IRQHandler [WEAK]
    EXPORT
    TIM8_CC_IRQHandler [WEAK]
    EXPORT ADC3_IRQHandler [WEAK]
    EXPORT
    FSMC_IRQHandler [WEAK]
    EXPORT SDIO_IRQHandler [WEAK]
    EXPORT
    TIM5_IRQHandler [WEAK]
    EXPORT SPI3_IRQHandler [WEAK]
    EXPORT
    UART4_IRQHandler [WEAK]
    EXPORT UART5_IRQHandler [WEAK]
    EXPORT
    TIM6_IRQHandler [WEAK]
    EXPORT TIM7_IRQHandler [WEAK]
    EXPORT
    DMA2_Channel1_IRQHandler [WEAK]
    EXPORT DMA2_Channel2_IRQHandler
    [WEAK]
    EXPORT DMA2_Channel3_IRQHandler [WEAK]
    EXPORT
    DMA2_Channel4_5_IRQHandler
    [WEAK]

    WWDG_IRQHandler
    PVD_IRQHandler
    TAMPER_IRQHandler
    RTC_IRQHandler
    FLASH_IRQHandler
    RCC_IRQHandler
    EXTI0_IRQHandler
    EXTI1_IRQHandler
    EXTI2_IRQHandler
    EXTI3_IRQHandler
    EXTI4_IRQHandler
    DMA1_Channel1_IRQHandler
    DMA1_Channel2_IRQHandler
    DMA1_Channel3_IRQHandler
    DMA1_Channel4_IRQHandler
    DMA1_Channel5_IRQHandler
    DMA1_Channel6_IRQHandler
    DMA1_Channel7_IRQHandler
    ADC1_2_IRQHandler
    USB_HP_CAN1_TX_IRQHandler
    USB_LP_CAN1_RX0_IRQHandler
    CAN1_RX1_IRQHandler
    CAN1_SCE_IRQHandler
    EXTI9_5_IRQHandler
    TIM1_BRK_IRQHandler
    TIM1_UP_IRQHandler
    TIM1_TRG_COM_IRQHandler
    TIM1_CC_IRQHandler
    TIM2_IRQHandler
    TIM3_IRQHandler
    TIM4_IRQHandler
    I2C1_EV_IRQHandler
    I2C1_ER_IRQHandler
    I2C2_EV_IRQHandler
    I2C2_ER_IRQHandler
    SPI1_IRQHandler
    SPI2_IRQHandler
    USART1_IRQHandler
    USART2_IRQHandler
    USART3_IRQHandler
    EXTI15_10_IRQHandler
    RTCAlarm_IRQHandler
    USBWakeUp_IRQHandler
    TIM8_BRK_IRQHandler
    TIM8_UP_IRQHandler
    TIM8_TRG_COM_IRQHandler
    TIM8_CC_IRQHandler
    ADC3_IRQHandler
    FSMC_IRQHandler
    SDIO_IRQHandler
    TIM5_IRQHandler
    SPI3_IRQHandler
    UART4_IRQHandler
    UART5_IRQHandler
    TIM6_IRQHandler
    TIM7_IRQHandler
    DMA2_Channel1_IRQHandler
    DMA2_Channel2_IRQHandler
    DMA2_Channel3_IRQHandler
    DMA2_Channel4_5_IRQHandler
    B
    .

    ENDP

    ALIGN

    ;*******************************************************************************
    ;
    User Stack and Heap
    initialization
    ;*******************************************************************************
    IF
    :DEF:__MICROLIB ;判断是否定义了这个宏

    EXPORT __initial_sp ;是的话定义为全局属性
    EXPORT
    __heap_base
    EXPORT __heap_limit

    ELSE

    IMPORT
    __use_two_region_memory ;使用2个存储区?
    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

    ALIGN
    ;填充字节使地址对齐

    ENDIF

    END ;结束汇编文件

    ;******************* (C)
    COPYRIGHT 2010 STMicroelectronics *****END OF FILE*****

  • 相关阅读:
    css相关
    杂题
    vuesheng生命周期
    box-sizing
    js正则学习
    浏览器加载解析过程
    Sass学习笔记
    jQuery与原生js实现banner轮播图
    jq-animate实现返回顶部效果
    jq-animate
  • 原文地址:https://www.cnblogs.com/skl374199080/p/3107916.html
Copyright © 2020-2023  润新知