当前位置: 首页 > article >正文

STM32启动文件学习(startup_stm32f40xx.s)

原代码

;******************** (C) COPYRIGHT 2016 STMicroelectronics ********************
;* File Name          : startup_stm32f40xx.s
;* Author             : MCD Application Team
;* @version           : V1.8.0
;* @date              : 09-November-2016
;* Description        : STM32F40xxx/41xxx devices vector table for MDK-ARM toolchain. 
;*                      Same as startup_stm32f40_41xxx.s and maintained for legacy purpose 
;*                      This module performs:
;*                      - Set the initial SP
;*                      - Set the initial PC == Reset_Handler
;*                      - Set the vector table entries with the exceptions ISR address
;*                      - Configure the system clock and the external SRAM mounted on 
;*                        STM324xG-EVAL board to be used as data memory (optional, 
;*                        to be enabled by user)
;*                      - Branches to __main in the C library (which eventually
;*                        calls main()).
;*                      After Reset the CortexM4 processor is in Thread mode,
;*                      priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>>   
;*******************************************************************************
; 
; Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
; You may not use this file except in compliance with the License.
; You may obtain a copy of the License at:
; 
;        http://www.st.com/software_license_agreement_liberty_v2
; 
; Unless required by applicable law or agreed to in writing, software 
; distributed under the License is distributed on an "AS IS" BASIS, 
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
; 
;*******************************************************************************; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; <h> Stack Configuration
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>Stack_Size      EQU     0x00000400AREA    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     0x00000200AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limitPRESERVE8THUMB; Vector Table Mapped to Address 0 at ResetAREA    RESET, DATA, READONLYEXPORT  __VectorsEXPORT  __Vectors_EndEXPORT  __Vectors_Size__Vectors       DCD     __initial_sp               ; Top of StackDCD     Reset_Handler              ; Reset HandlerDCD     NMI_Handler                ; NMI HandlerDCD     HardFault_Handler          ; Hard Fault HandlerDCD     MemManage_Handler          ; MPU Fault HandlerDCD     BusFault_Handler           ; Bus Fault HandlerDCD     UsageFault_Handler         ; Usage Fault HandlerDCD     0                          ; ReservedDCD     0                          ; ReservedDCD     0                          ; ReservedDCD     0                          ; ReservedDCD     SVC_Handler                ; SVCall HandlerDCD     DebugMon_Handler           ; Debug Monitor HandlerDCD     0                          ; ReservedDCD     PendSV_Handler             ; PendSV HandlerDCD     SysTick_Handler            ; SysTick Handler; External InterruptsDCD     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                                             DCD     DMA1_Stream0_IRQHandler           ; DMA1 Stream 0                                   DCD     DMA1_Stream1_IRQHandler           ; DMA1 Stream 1                                   DCD     DMA1_Stream2_IRQHandler           ; DMA1 Stream 2                                   DCD     DMA1_Stream3_IRQHandler           ; DMA1 Stream 3                                   DCD     DMA1_Stream4_IRQHandler           ; DMA1 Stream 4                                   DCD     DMA1_Stream5_IRQHandler           ; DMA1 Stream 5                                   DCD     DMA1_Stream6_IRQHandler           ; DMA1 Stream 6                                   DCD     ADC_IRQHandler                    ; ADC1, ADC2 and ADC3s                            DCD     CAN1_TX_IRQHandler                ; CAN1 TX                                                DCD     CAN1_RX0_IRQHandler               ; CAN1 RX0                                               DCD     CAN1_RX1_IRQHandler               ; CAN1 RX1                                               DCD     CAN1_SCE_IRQHandler               ; CAN1 SCE                                               DCD     EXTI9_5_IRQHandler                ; External Line[9:5]s                                    DCD     TIM1_BRK_TIM9_IRQHandler          ; TIM1 Break and TIM9                   DCD     TIM1_UP_TIM10_IRQHandler          ; TIM1 Update and TIM10                 DCD     TIM1_TRG_COM_TIM11_IRQHandler     ; TIM1 Trigger and Commutation and TIM11DCD     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              ; External Line[15:10]s                                  DCD     RTC_Alarm_IRQHandler              ; RTC Alarm (A and B) through EXTI Line                  DCD     OTG_FS_WKUP_IRQHandler            ; USB OTG FS Wakeup through EXTI line                        DCD     TIM8_BRK_TIM12_IRQHandler         ; TIM8 Break and TIM12                  DCD     TIM8_UP_TIM13_IRQHandler          ; TIM8 Update and TIM13                 DCD     TIM8_TRG_COM_TIM14_IRQHandler     ; TIM8 Trigger and Commutation and TIM14DCD     TIM8_CC_IRQHandler                ; TIM8 Capture Compare                                   DCD     DMA1_Stream7_IRQHandler           ; DMA1 Stream7                                           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_DAC_IRQHandler               ; TIM6 and DAC1&2 underrun errors                   DCD     TIM7_IRQHandler                   ; TIM7                   DCD     DMA2_Stream0_IRQHandler           ; DMA2 Stream 0                                   DCD     DMA2_Stream1_IRQHandler           ; DMA2 Stream 1                                   DCD     DMA2_Stream2_IRQHandler           ; DMA2 Stream 2                                   DCD     DMA2_Stream3_IRQHandler           ; DMA2 Stream 3                                   DCD     DMA2_Stream4_IRQHandler           ; DMA2 Stream 4                                   DCD     ETH_IRQHandler                    ; Ethernet                                        DCD     ETH_WKUP_IRQHandler               ; Ethernet Wakeup through EXTI line                      DCD     CAN2_TX_IRQHandler                ; CAN2 TX                                                DCD     CAN2_RX0_IRQHandler               ; CAN2 RX0                                               DCD     CAN2_RX1_IRQHandler               ; CAN2 RX1                                               DCD     CAN2_SCE_IRQHandler               ; CAN2 SCE                                               DCD     OTG_FS_IRQHandler                 ; USB OTG FS                                      DCD     DMA2_Stream5_IRQHandler           ; DMA2 Stream 5                                   DCD     DMA2_Stream6_IRQHandler           ; DMA2 Stream 6                                   DCD     DMA2_Stream7_IRQHandler           ; DMA2 Stream 7                                   DCD     USART6_IRQHandler                 ; USART6                                           DCD     I2C3_EV_IRQHandler                ; I2C3 event                                             DCD     I2C3_ER_IRQHandler                ; I2C3 error                                             DCD     OTG_HS_EP1_OUT_IRQHandler         ; USB OTG HS End Point 1 Out                      DCD     OTG_HS_EP1_IN_IRQHandler          ; USB OTG HS End Point 1 In                       DCD     OTG_HS_WKUP_IRQHandler            ; USB OTG HS Wakeup through EXTI                         DCD     OTG_HS_IRQHandler                 ; USB OTG HS                                      DCD     DCMI_IRQHandler                   ; DCMI                                            DCD     CRYP_IRQHandler                   ; CRYP crypto                                     DCD     HASH_RNG_IRQHandler               ; Hash and RngDCD     FPU_IRQHandler                    ; FPU__Vectors_End__Vectors_Size  EQU  __Vectors_End - __VectorsAREA    |.text|, CODE, READONLY; Reset handler
Reset_Handler    PROCEXPORT  Reset_Handler             [WEAK]IMPORT  SystemInitIMPORT  __mainLDR     R0, =SystemInitBLX     R0LDR     R0, =__mainBX      R0ENDP; Dummy Exception Handlers (infinite loops which can be modified)NMI_Handler     PROCEXPORT  NMI_Handler                [WEAK]B       .ENDP
HardFault_Handler\PROCEXPORT  HardFault_Handler          [WEAK]B       .ENDP
MemManage_Handler\PROCEXPORT  MemManage_Handler          [WEAK]B       .ENDP
BusFault_Handler\PROCEXPORT  BusFault_Handler           [WEAK]B       .ENDP
UsageFault_Handler\PROCEXPORT  UsageFault_Handler         [WEAK]B       .ENDP
SVC_Handler     PROCEXPORT  SVC_Handler                [WEAK]B       .ENDP
DebugMon_Handler\PROCEXPORT  DebugMon_Handler           [WEAK]B       .ENDP
PendSV_Handler  PROCEXPORT  PendSV_Handler             [WEAK]B       .ENDP
SysTick_Handler PROCEXPORT  SysTick_Handler            [WEAK]B       .ENDPDefault_Handler PROCEXPORT  WWDG_IRQHandler                   [WEAK]                                        EXPORT  PVD_IRQHandler                    [WEAK]                      EXPORT  TAMP_STAMP_IRQHandler             [WEAK]         EXPORT  RTC_WKUP_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_Stream0_IRQHandler           [WEAK]                                EXPORT  DMA1_Stream1_IRQHandler           [WEAK]                                   EXPORT  DMA1_Stream2_IRQHandler           [WEAK]                                   EXPORT  DMA1_Stream3_IRQHandler           [WEAK]                                   EXPORT  DMA1_Stream4_IRQHandler           [WEAK]                                   EXPORT  DMA1_Stream5_IRQHandler           [WEAK]                                   EXPORT  DMA1_Stream6_IRQHandler           [WEAK]                                   EXPORT  ADC_IRQHandler                    [WEAK]                         EXPORT  CAN1_TX_IRQHandler                [WEAK]                                                EXPORT  CAN1_RX0_IRQHandler               [WEAK]                                               EXPORT  CAN1_RX1_IRQHandler               [WEAK]                                                EXPORT  CAN1_SCE_IRQHandler               [WEAK]                                                EXPORT  EXTI9_5_IRQHandler                [WEAK]                                    EXPORT  TIM1_BRK_TIM9_IRQHandler          [WEAK]                  EXPORT  TIM1_UP_TIM10_IRQHandler          [WEAK]                EXPORT  TIM1_TRG_COM_TIM11_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  RTC_Alarm_IRQHandler              [WEAK]                  EXPORT  OTG_FS_WKUP_IRQHandler            [WEAK]                        EXPORT  TIM8_BRK_TIM12_IRQHandler         [WEAK]                 EXPORT  TIM8_UP_TIM13_IRQHandler          [WEAK]                 EXPORT  TIM8_TRG_COM_TIM14_IRQHandler     [WEAK] EXPORT  TIM8_CC_IRQHandler                [WEAK]                                   EXPORT  DMA1_Stream7_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_DAC_IRQHandler               [WEAK]                   EXPORT  TIM7_IRQHandler                   [WEAK]                    EXPORT  DMA2_Stream0_IRQHandler           [WEAK]                                  EXPORT  DMA2_Stream1_IRQHandler           [WEAK]                                   EXPORT  DMA2_Stream2_IRQHandler           [WEAK]                                    EXPORT  DMA2_Stream3_IRQHandler           [WEAK]                                    EXPORT  DMA2_Stream4_IRQHandler           [WEAK]                                 EXPORT  ETH_IRQHandler                    [WEAK]                                         EXPORT  ETH_WKUP_IRQHandler               [WEAK]                     EXPORT  CAN2_TX_IRQHandler                [WEAK]                                               EXPORT  CAN2_RX0_IRQHandler               [WEAK]                                               EXPORT  CAN2_RX1_IRQHandler               [WEAK]                                               EXPORT  CAN2_SCE_IRQHandler               [WEAK]                                               EXPORT  OTG_FS_IRQHandler                 [WEAK]                                       EXPORT  DMA2_Stream5_IRQHandler           [WEAK]                                   EXPORT  DMA2_Stream6_IRQHandler           [WEAK]                                   EXPORT  DMA2_Stream7_IRQHandler           [WEAK]                                   EXPORT  USART6_IRQHandler                 [WEAK]                                           EXPORT  I2C3_EV_IRQHandler                [WEAK]                                              EXPORT  I2C3_ER_IRQHandler                [WEAK]                                              EXPORT  OTG_HS_EP1_OUT_IRQHandler         [WEAK]                      EXPORT  OTG_HS_EP1_IN_IRQHandler          [WEAK]                      EXPORT  OTG_HS_WKUP_IRQHandler            [WEAK]                        EXPORT  OTG_HS_IRQHandler                 [WEAK]                                      EXPORT  DCMI_IRQHandler                   [WEAK]                                             EXPORT  CRYP_IRQHandler                   [WEAK]                                     EXPORT  HASH_RNG_IRQHandler               [WEAK]EXPORT  FPU_IRQHandler                    [WEAK]WWDG_IRQHandler                                                       
PVD_IRQHandler                                      
TAMP_STAMP_IRQHandler                  
RTC_WKUP_IRQHandler                                
FLASH_IRQHandler                                                       
RCC_IRQHandler                                                            
EXTI0_IRQHandler                                                          
EXTI1_IRQHandler                                                           
EXTI2_IRQHandler                                                          
EXTI3_IRQHandler                                                         
EXTI4_IRQHandler                                                          
DMA1_Stream0_IRQHandler                                       
DMA1_Stream1_IRQHandler                                          
DMA1_Stream2_IRQHandler                                          
DMA1_Stream3_IRQHandler                                          
DMA1_Stream4_IRQHandler                                          
DMA1_Stream5_IRQHandler                                          
DMA1_Stream6_IRQHandler                                          
ADC_IRQHandler                                         
CAN1_TX_IRQHandler                                                            
CAN1_RX0_IRQHandler                                                          
CAN1_RX1_IRQHandler                                                           
CAN1_SCE_IRQHandler                                                           
EXTI9_5_IRQHandler                                                
TIM1_BRK_TIM9_IRQHandler                        
TIM1_UP_TIM10_IRQHandler                      
TIM1_TRG_COM_TIM11_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                                            
RTC_Alarm_IRQHandler                            
OTG_FS_WKUP_IRQHandler                                
TIM8_BRK_TIM12_IRQHandler                      
TIM8_UP_TIM13_IRQHandler                       
TIM8_TRG_COM_TIM14_IRQHandler  
TIM8_CC_IRQHandler                                               
DMA1_Stream7_IRQHandler                                                 
FSMC_IRQHandler                                                            
SDIO_IRQHandler                                                            
TIM5_IRQHandler                                                            
SPI3_IRQHandler                                                            
UART4_IRQHandler                                                          
UART5_IRQHandler                                                          
TIM6_DAC_IRQHandler                            
TIM7_IRQHandler                              
DMA2_Stream0_IRQHandler                                         
DMA2_Stream1_IRQHandler                                          
DMA2_Stream2_IRQHandler                                           
DMA2_Stream3_IRQHandler                                           
DMA2_Stream4_IRQHandler                                        
ETH_IRQHandler                                                         
ETH_WKUP_IRQHandler                                
CAN2_TX_IRQHandler                                                           
CAN2_RX0_IRQHandler                                                          
CAN2_RX1_IRQHandler                                                          
CAN2_SCE_IRQHandler                                                          
OTG_FS_IRQHandler                                                    
DMA2_Stream5_IRQHandler                                          
DMA2_Stream6_IRQHandler                                          
DMA2_Stream7_IRQHandler                                          
USART6_IRQHandler                                                        
I2C3_EV_IRQHandler                                                          
I2C3_ER_IRQHandler                                                          
OTG_HS_EP1_OUT_IRQHandler                           
OTG_HS_EP1_IN_IRQHandler                            
OTG_HS_WKUP_IRQHandler                                
OTG_HS_IRQHandler                                                   
DCMI_IRQHandler                                                            
CRYP_IRQHandler                                                    
HASH_RNG_IRQHandler
FPU_IRQHandlerB       .ENDPALIGN;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************IF      :DEF:__MICROLIBEXPORT  __initial_spEXPORT  __heap_baseEXPORT  __heap_limitELSEIMPORT  __use_two_region_memoryEXPORT  __user_initial_stackheap__user_initial_stackheapLDR     R0, =  Heap_MemLDR     R1, =(Stack_Mem + Stack_Size)LDR     R2, = (Heap_Mem +  Heap_Size)LDR     R3, = Stack_MemBX      LRALIGNENDIFEND;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****

框架讲解

STM32F40xx 系列微控制器的标准启动代码(Startup Code)(汇编语言编写)用于芯片复位后的初始化和引导流程。

整体结构与功能

  1. 设置堆栈(Stack/Heap):定义程序运行时的栈和堆空间。
  2. 向量表(Vector Table):存储中断和异常处理函数的地址,复位后由硬件自动加载。
  3. 复位处理流程:初始化系统时钟,跳转到 C 语言的main函数。
  4. 默认中断处理函数:提供未实现中断的默认处理(死循环),用户可自定义替换。

详细代码解析

;******************** (C) COPYRIGHT 2016 STMicroelectronics ********************
; 文件名: startup_stm32f40xx.s
; 作者: MCD Application Team
; @version: V1.8.0
; @date: 09-November-2016
; 描述: STM32F40xxx/41xxx设备的向量表,用于MDK-ARM工具链。
;       与startup_stm32f40_41xxx.s相同,为遗留目的而维护。
;       本模块执行以下操作:
;       - 设置初始堆栈指针(SP)
;       - 设置初始程序计数器(PC)等于复位处理程序(Reset_Handler)
;       - 在向量表条目中设置异常中断服务程序(ISR)的地址
;       - 配置系统时钟和STM324xG-EVAL板上的外部SRAM,用作数据存储器(可选,用户启用)
;       - 跳转到C库中的__main(最终调用main())。
;       复位后,Cortex-M4处理器处于线程模式,优先级为特权级,堆栈设置为主堆栈。
; <<< 在上下文菜单中使用配置向导 >>>
;*******************************************************************************; 许可证信息...; 为堆栈分配的内存量(以字节为单位)
; 根据应用程序的需要调整此值
; <h> 堆栈配置
;   <o> 堆栈大小(以字节为单位) <0x0-0xFFFFFFFF:8>
; </h>
Stack_Size      EQU     0x00000400 ; 堆栈大小定义为1024字节AREA    STACK, NOINIT, READWRITE, ALIGN=3 ; 定义一个名为STACK的内存区域,未初始化,可读可写,8字节对齐
Stack_Mem       SPACE   Stack_Size ; 在STACK区域中分配Stack_Size大小的空间
__initial_sp      ; 堆栈顶部指针的标记; <h> 堆配置
;   <o>  堆大小(以字节为单位) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size       EQU     0x00000200 ; 堆大小定义为512字节AREA    HEAP, NOINIT, READWRITE, ALIGN=3 ; 定义一个名为HEAP的内存区域,未初始化,可读可写,8字节对齐
__heap_base      ; 堆基地址的标记
Heap_Mem        SPACE   Heap_Size ; 在HEAP区域中分配Heap_Size大小的空间
__heap_limit     ; 堆限制地址的标记PRESERVE8 ; 确保堆栈8字节对齐THUMB     ; 指示接下来的代码以Thumb指令集执行; 向量表映射到复位时的地址0AREA    RESET, DATA, READONLY ; 定义一个名为RESET的内存区域,数据段,只读EXPORT  __Vectors ; 导出向量表符号,使其可在其他文件中引用EXPORT  __Vectors_End ; 导出向量表结束符号EXPORT  __Vectors_Size ; 导出向量表大小符号__Vectors       DCD     __initial_sp       ; 向量表第一项:堆栈顶部地址DCD     Reset_Handler      ; 向量表第二项:复位处理程序地址DCD     NMI_Handler        ; 向量表第三项:NMI处理程序地址; ...(其他异常和中断处理程序地址)DCD     FPU_IRQHandler     ; 向量表最后一项:FPU中断处理程序地址__Vectors_End   ; 向量表结束标记__Vectors_Size  EQU  __Vectors_End - __Vectors ; 计算向量表大小AREA    |.text|, CODE, READONLY ; 定义一个名为.text的内存区域,代码段,只读; 复位处理程序
Reset_Handler    PROCEXPORT  Reset_Handler         [WEAK] ; 弱导出Reset_Handler,允许用户覆盖IMPORT  SystemInit                   ; 导入SystemInit函数IMPORT  __main                       ; 导入__main函数LDR     R0, =SystemInit      ; 将SystemInit函数的地址加载到R0寄存器BLX     R0                   ; 跳转到SystemInit函数执行LDR     R0, =__main          ; 将__main函数的地址加载到R0寄存器BX      R0                   ; 跳转到__main函数执行ENDP                         ; 结束Reset_Handler过程; 虚拟异常处理程序(无限循环,可以修改)
NMI_Handler     PROCEXPORT  NMI_Handler         [WEAK] ; 弱导出NMI_Handler,允许用户覆盖B       .                   ; 无限循环ENDP                         ; 结束NMI_Handler过程; ...(其他异常处理程序,结构类似NMI_Handler)Default_Handler PROC; 为所有未覆盖的外部中断处理程序提供默认实现; ...(列出所有外部中断处理程序的弱导出)B       .                   ; 无限循环ENDP                         ; 结束Default_Handler过程ALIGN   ; 确保接下来的代码按字对齐; 用户堆栈和堆初始化(如果使用微库,则不需要此部分)IF      :DEF:__MICROLIBEXPORT  __initial_spEXPORT  __heap_baseEXPORT  __heap_limitELSEIMPORT  __use_two_region_memoryEXPORT  __user_initial_stackheap__user_initial_stackheapLDR     R0, =  Heap_Mem      ; 加载堆基地址到R0LDR     R1, =(Stack_Mem + Stack_Size) ; 计算堆栈顶部地址并加载到R1LDR     R2, = (Heap_Mem +  Heap_Size) ; 加载堆限制地址到R2LDR     R3, = Stack_Mem      ; 加载堆栈基地址到R3BX      LR                   ; 返回ALIGN   ; 确保接下来的代码按字对齐ENDIFEND     ; 结束文件;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****

Q&A

1.AREA STACK, NOINIT, READWRITE, ALIGN=3什么意思

  1. AREA 指令:
    这是 ARM 汇编语言中的一个伪指令,用于定义一个内存区域(Section)。
    语法:AREA 区域名, 属性1, 属性2, …
  2. STACK:
    这是你给这个内存区域起的名字,可以自定义,但通常习惯用 “STACK” 表示栈区域。
  3. NOINIT:
    这个属性表示该内存区域不需要初始化。
    也就是说,系统不会在启动时为这个区域填充初始值(如 0),其内容是未定义的。
    栈空间通常不需要预先初始化,因为程序运行时会动态使用它。
  4. READWRITE:
    表示该区域具有读写权限。
    栈需要能够被程序读写(压栈和出栈操作),所以设置为读写属性。
  5. ALIGN=3:
    指定该区域的起始地址要按 2 的幂次方对齐。
    ALIGN=3 表示按 2³ = 8 字节对齐。
    这样可以确保栈的起始地址是 8 的倍数,提高内存访问效率。

2.Stack_Size和Heap_Size最大能分配到多少

Stack_Size(堆栈大小)和Heap_Size(堆大小)的总和不能超过SRAM的总大小,否则会导致内存溢出和程序崩溃
在设置这些值时,建议从较小的值开始,并逐步增加,直到找到满足应用程序需求的最佳平衡点。同时,还需要注意监控内存使用情况,以避免内存溢出和其他潜在问题。

3.malloc超出堆空间怎么办

在使用malloc的时候要去读取malloc函数带回来的返回值,正常malloc成功返回的是开辟好空间的指针,malloc失败就返回空指针,一定要检查。再对Heap做出调整

相关文章:

STM32启动文件学习(startup_stm32f40xx.s)

原代码 ;******************** (C) COPYRIGHT 2016 STMicroelectronics ******************** ;* File Name : startup_stm32f40xx.s ;* Author : MCD Application Team ;* version : V1.8.0 ;* date : 09-November-2016 ;* Desc…...

构建高效可靠的电商 API:设计原则与实践指南

引言 在数字化浪潮中&#xff0c;电商 API 接口技术已成为连接不同系统、实现数据高效流通的核心桥梁。通过标准化的协议和工具集合&#xff0c;API 不仅支撑了商品管理、订单处理等基础功能&#xff0c;还为个性化推荐、全球供应链协同等创新场景提供了底层支持。本文将结合行…...

开源数据库MySQL 与 PostgreSQL的巅峰对决。

MySQL 与 PostgreSQL 是两大主流开源关系型数据库&#xff0c;其核心差异主要体现在架构设计、功能特性、性能优化及适用场景上。结合最新技术对比和行业实践&#xff0c;以下为深度解析&#xff1a; &#x1f9e0; ​​一、架构与设计哲学​​ ​​维度​​​​PostgreSQL​​…...

从 LeetCode 到日志匹配:一行 Swift 实现规则识别

文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在开发中我们经常遇到“模式匹配”的问题&#xff0c;比如日志分类、用户意图识别、甚至是在一些权限系统中做规则映射判断。这类问题的本质是判断两个结构是否具有一致的对应关系。LeetCo…...

前端js获取当前经纬度(H5/pc/mac/window都可用)

前端JS获取当前位置的经纬度&#xff08;H5/PC/mac/window都可用&#xff0c;亲测&#xff01;&#xff09;&#xff0c;效果如下。 完整代码如下&#xff1a; <!-- 用原生api获取经纬度&#xff0c;转化为百度经纬度与服务端交互&#xff0c; 只支持https&#xff01; --&g…...

Meta计划借助AI实现广告创作全自动化

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

AI编程规范失控?三大策略用Cursor Rules精准约束

​在 AI 编程时代,如何让助手精准理解您的项目规范?当团队协作时,如何确保每位开发者生成的代码风格统一?Cursor Rules 正是您需要的终极解决方案——它如同一位永不疲倦的架构师,通过预设规则控制 AI 的每一次代码生成、重构与补全行为。 本教程将带您深入 Cursor Rules…...

4.大语言模型预备数学知识

大语言模型预备数学知识 复习一下在大语言模型中用到的矩阵和向量的运算&#xff0c;及概率统计和神经网络中常用概念。 矩阵的运算 矩阵 矩阵加减法 条件&#xff1a;行数列数相同的矩阵才能做矩阵加减法 数值与矩阵的乘除法 矩阵乘法 条件&#xff1a;矩阵A的列数 矩阵…...

免费开源Umi-OCR,离线使用,批量精准!

Umi-OCR&#xff08;Windows端&#xff09; Umi-OCR 是一款在 GitHub 上开源的免费 OCR 识别软件&#xff0c;它最大的亮点就是免费、开源、支持批量处理&#xff0c;而且识别准确度很高。这款软件不需要联网就能用&#xff0c;非常值得推荐&#xff01; 在 OCR 识别功能方面&…...

NLP驱动网页数据分类与抽取实战

一、性能瓶颈点&#xff1a;数据抽取中的「三座大山」 在使用NLP技术进行网页商品数据抽取时&#xff0c;很多工程师会遇到如下三类瓶颈&#xff1a; 1. 请求延迟高&#xff1a;目标站点反爬机制灵敏&#xff0c;普通请求频繁被封。2. 结构解析慢&#xff1a;HTML结构复杂&am…...

设计模式之单例模式(二): 心得体会

设计模式之单例模式(一)-CSDN博客 目录 1.背景 2.分析 2.1.违背面向对象设计原则&#xff0c;导致职责混乱 2.2.全局状态泛滥&#xff0c;引发依赖与耦合灾难 2.3.多线程场景下风险放大&#xff0c;性能与稳定性受损 2.4.测试与维护难度指数级上升 2.5.违背 “最小知识原…...

使用Python提取PDF元数据的完整指南

PDF文档中包含着丰富的元数据信息&#xff0c;这些信息对文档管理和数据分析具有重要意义。本文将详细介绍如何利用Python高效提取PDF元数据&#xff0c;并对比主流技术方案的优劣。 ## 一、PDF元数据概述 PDF元数据&#xff08;Metadata&#xff09;是包含在文档中的结构化信…...

uni-app学习笔记十八--uni-app static目录简介

本笔记内容摘录自工程简介 | uni-app官网 一个 uni-app 工程&#xff0c;就是一个 Vue 项目&#xff0c;在完成uni-app项目创建后&#xff0c;会生成一个static目录&#xff0c; 为什么需要static这样的目录&#xff1f; uni-app编译器根据pages.json扫描需要编译的页面&…...

阿里云ACP云计算备考笔记 (3)——云存储RDS

目录 第一章 云存储概览 1、云存储通用知识 ① 发展历史 ② 云存储的优势 2、云存储分类 3、文件存储业务场景 第二章 块存储 1、块存储分类 2、云盘的优势 3、创建云盘 4、管理数据盘 ① 格式化数据盘 ② 挂载数据盘 ③ 通过 API 挂载云盘 5、管理系统盘 ① 更…...

仓颉语言---Socket编程

一、什么是Socket编程&#xff1f; 1.定义 Socket&#xff08;套接字&#xff09;可以被理解为网络上两个进程之间通信的端点。它是网络通信的抽象表示&#xff0c;封装了底层网络协议的复杂性&#xff0c;为应用程序提供了一个简单统一的接口。 Socket 编程是一种网络编程范式…...

Mysql的B-树和B+树的区别总结

B 树也称 B- 树&#xff0c;全称为 多路平衡查找树&#xff0c;B 树是 B 树的一种变体。B 树和 B 树中的 B 是 Balanced&#xff08;平衡&#xff09;的意思。 目前大部分数据库系统及文件系统都采用 B-Tree 或其变种 BTree 作为索引结构。 B 树& B 树两者有何异同呢&…...

【Java EE初阶 --- 多线程(初阶)】多线程的实现案例

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 文章目录 前言单例模式实现单例模式…...

制作一款打飞机游戏64:关卡设计

今天我想完成第一个音乐循环的关卡设计。 初始设置 首先&#xff0c;我要删除所有之前创建的敌人和“大脑”&#xff08;可能指敌人的行为模式或AI&#xff09;。我不想保留它们&#xff0c;我要从零开始&#xff0c;重新创建敌人。但我会保留精灵&#xff08;游戏中的角色或…...

开发常用的QT mql组件

Column Column 是一种将其子项沿单个列定位的类型。它是不使用锚点的情况下垂直定位一系列项目的便捷方式。 add : Transition bottomPadding : real leftPadding : real move : Transition padding : real populate : Transition rightPadding : real spacing : rea…...

Git操作记录

一.简单上传操作 1.Git 全局设置 git config --global user.name "xxx" git config --global user.email "xxx"2.创建新存储库 git clone gitgitlab.xxx.cn:xx/xxx/xxx.git cd test touch README.md git add README.md git commit -m "add README&qu…...

Vue Router的核心实现原理深度解析

1. Vue Router的基本架构 Vue Router的核心功能是实现前端路由&#xff0c;即在不重新加载页面的情况下更改应用的视图。它的基本架构包括&#xff1a; 路由配置&#xff1a;定义路径与组件的映射关系路由实例&#xff1a;管理路由状态和提供导航方法路由视图&#xff1a;渲染…...

Python趣学篇:用Pygame打造绚烂流星雨动画

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏介绍&#xff1a;《Python星球日记》 目录 一、项目简介与效果展示二、技术栈与核…...

AI系统负载均衡与动态路由

载均衡与动态路由 在微服务架构中,负载均衡是实现服务高可用和性能优化的关键机制。传统负载均衡技术通常围绕请求数、连接数、CPU占用率等基础指标进行分发,而在AI系统中,特别是多模型、多异构算力(如CPU、GPU、TPU)共存的环境下,负载均衡不仅要考虑节点资源消耗,还需…...

山西省第十八届职业院校技能大赛 网络建设与运维赛项 样题

山西省第十八届职业院校技能大赛 网络建设与运维赛项 &#xff08;学生组&#xff09; 样题 2024 年 11 月 xx 日 2 赛题说明 一、竞赛项目简介 “网络建设与运维”竞赛共分为模块一&#xff1a;网络理论测试与网络 运维&#xff1b;模块二&#xff1a; 网络建设与调试&a…...

Stone 3D新版本发布,添加玩家控制和生物模拟等组件,增强路径编辑功能,优化材质编辑

后续版本号改为构建日期加小版本&#xff0c;所以最新版本为20250603.01 功能更新如下&#xff1a; 1. 改写fps-controls组件&#xff0c;简化游戏应用的创建&#xff0c;你只需要一个场景glb&#xff0c;然后给Scene节点添加fps-controls组件&#xff0c;即可完成一个第一人…...

【Qt】之【Get√】【Bug】通过值捕获(或 const 引用捕获)传进 lambda,会默认复制成 const

通过值捕获&#xff08;或 const 引用捕获&#xff09;传进 lambda&#xff0c;会默认复制成 const。 背景 匿名函数外部定义 QSet<QString> nameSet,需要传入匿名函数使用修改 connect(dlg, ..., [nameSet](...) {nameSet.insert(name); // ❌ 这里其实是 const QSet…...

排序算法C语言实现

算法概览 排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性适用场景插入排序O(n)O(n)O(1)稳定小规模/基本有序希尔排序O(n log n)O(n)O(1)不稳定中等规模冒泡排序O(n)O(n)O(1)稳定教学/小规模堆排序O(n log n)O(n log n)O(1)不稳定大规模数据选择排序O(n)O(n)O(1)不稳定…...

Python----目标检测(训练YOLOV8网络)

一、数据集标注 在已经采集的数据中&#xff0c;使用labelImg进行数据集标注&#xff0c;标注后的txt与原始 图像文件同名且在同一个文件夹&#xff08;data&#xff09;即可。 二、制作数据集 在data目录的同目录下&#xff0c;新建dataset目录&#xff0c;以存放制作好的YOLO…...

构建 MCP 服务器:第一部分 — 资源入门

什么是模型上下文协议? 模型上下文协议(MCP) 是Claude等大型语言模型 (LLM) 与外部数据和功能安全交互的标准化方式。您可以将其想象成一个平视显示器,或者 AI 的 USB 端口——它提供了一个通用接口,允许任何兼容 MCP 的 LLM 连接到您的数据和工具。 MCP 提供了一个集中式协…...

c# :this() 和 :base()区别

在 C# 中&#xff0c;:this() 和 :base() 都用于构造函数的重载和继承&#xff0c;但它们有不同的用途和上下文&#xff1a; 1. :this() 用途&#xff1a;用于调用当前类中的其他构造函数&#xff08;构造函数重载&#xff09;。场景&#xff1a;当你希望一个构造函数先执行另…...