原代码

;******************** (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做出调整

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/84240.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/84240.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/84240.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app学习笔记二十三--交互反馈showToast用法

showToast部分文档位于uniapp官网-->API-->界面&#xff1a;uni.showToast(OBJECT) | uni-app官网 uni.showToast(OBJECT) 用于显示消息提示框 OBJECT参数说明 参数类型必填说明平台差异说明titleString是提示的内容&#xff0c;长度与 icon 取值有关。iconString否图…

【Ragflow】26.RagflowPlus(v0.4.0):完善解析逻辑/文档撰写模式全新升级

概述 在历经半个月的间歇性开发后&#xff0c;RagflowPlus再次迎来一轮升级&#xff0c;正式发布v0.4.0。 开源地址&#xff1a;https://github.com/zstar1003/ragflow-plus 更新方法 下载仓库最新代码&#xff1a; git clone https://github.com/zstar1003/ragflow-plus.…

【论文解读】Toolformer: 语言模型自学使用工具

1st author: ‪Timo Schick‬ - ‪Google Scholar‬ paper: Toolformer: Language Models Can Teach Themselves to Use Tools | OpenReview NeurIPS 2023 oral code: lucidrains/toolformer-pytorch: Implementation of Toolformer, Language Models That Can Use Tools, by…

Spring 官方推荐构造函数注入

1. 依赖关系明确 构造函数注入可以清晰地声明类的依赖关系&#xff0c;所有必需的依赖项都通过构造函数参数传递&#xff0c;使得代码的可读性更高。这种方式让类的使用者能够直观地了解类的依赖&#xff0c;而不需要通过注解或反射来猜测。 2. 增强代码健壮性 构造函数注入…

[深度学习]搭建开发平台及Tensor基础

一、实验目的 1. 掌握Windows下PyTorch 深度学习环境的配置 2. 掌握一种PyTorch开发工具 3. 理解张量并掌握Tensor的常用操作&#xff08;创建、调整形状、加、减、乘、除、取绝对值、比较操作、数理统计操作 4. 掌握Tensor与Numpy的互相转换操作 5. 掌握Tensor 的降维和…

【Zephyr 系列 14】使用 MCUboot 实现 BLE OTA 升级机制:构建安全可靠的固件分发系统

🧠关键词:Zephyr、MCUboot、OTA 升级、BLE DFU、双分区、Bootloader、安全固件管理 📌面向读者:希望基于 Zephyr 为 BLE 设备加入安全 OTA 升级功能的开发者 📊预计字数:5200+ 字 🧭 前言:为什么你需要 OTA? 随着设备部署数量增多与产品生命周期延长,远程升级(…

App Search 和 Workplace Search 独立产品现已弃用

作者&#xff1a;来自 Elastic The Search Product Team App Search 和 Workplace Search 的核心功能已集成到 Elasticsearch 和 Kibana 中。 我们宣布在 9.0 版本中弃用 App Search 和 Workplace Search。 如果你是 Elastic 的客户&#xff0c;当前正在使用 App Search 和 Wo…

Spring Boot + OpenAI 构建基于RAG的智能问答系统

一、技术架构设计 1.1 系统架构图 [前端]│▼ (HTTP/REST) [Spring Boot Controller]│▼ (Service Call) [问答处理服务层]├─▶ [知识库检索模块] ──▶ [向量数据库]└─▶ [OpenAI集成模块] ──▶ [OpenAI API]│▼ [结果组装与返回] 1.2 技术选型 组件技术栈版本要求…

Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)

13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…

【论文阅读29】区间预测CIPM(2025)

这篇论文主要研究的是滑坡位移的区间预测方法&#xff0c;提出了一种新型的预测模型&#xff0c;叫做复合区间预测模型&#xff08;CIPM&#xff09;&#xff0c;并以三峡库区的白家堡滑坡为案例进行了应用和验证。论文的核心内容和贡献包括&#xff1a; 背景与问题 滑坡位移预…

Linux 文件系统底层原理笔记:磁盘结构、ext2 文件系统与软硬链接解析

文章目录 一、理解硬件1.1 磁盘、服务器、机柜、机房1.2 磁盘物理结构1.3 磁盘的存储结构1.4 磁盘的逻辑结构1.4.1 理解过程1.4.2 真实过程 1.5 CHS && LBA地址 二、引入文件系统2.1 引入"块"概念2.2 引入"分区"概念2.3 引入"inode"概念…

75Qt窗口_Qt窗口概览

Qt 窗⼝ 是通过 QMainWindow类 来实现的。 QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类&#xff0c;继承⾃ QWidget 类&#xff0c;并且提供了⼀个预定义的布局。 QMainWindow 包含 ⼀个菜单栏&#xff08;menu bar&#xff09;、多个⼯具栏(tool bars)、多个浮动窗⼝&#x…

Appium+python自动化(九)- 定位元素工具

简介 环境搭建好了&#xff0c;其他方面的知识也准备的差不多了&#xff0c;那么就开始下一步元素定位&#xff0c;元素定位主要介绍如何使用uiautomatorviewer&#xff0c;通过定位到页面上的元素&#xff0c;然后进行相应的点击等操作. 此外在介绍另一款工具&#xff1a;Insp…

apipost将token设置为环境变量

右上角 可以新增或者是修改当前的环境 环境变量增加一个token,云端值和本地值可以不用写 在返回token的接口里设置后执行操作&#xff0c;通常是登录的接口 右侧也有方法提示 //设置环境变量 apt.environment.set("token", response.json.data.token); 在需要传t…

【Docker 02】Docker 安装

&#x1f308; 一、各版本的平台支持情况 ⭐ 1. Server 版本 Server 版本的 Docker 就只有个命令行&#xff0c;没有界面。 Platformx86_64 / amd64arm64 / aarch64arm(32 - bit)s390xCentOs√√Debian√√√Fedora√√Raspbian√RHEL√SLES√Ubuntu√√√√Binaries√√√ …

青少年编程与数学 01-011 系统软件简介 08 Windows操作系统

青少年编程与数学 01-011 系统软件简介 08 Windows操作系统 1. Windows操作系统的起源与发展1.1 早期版本&#xff08;1985-1995&#xff09;1.2 Windows 9x系列&#xff08;1995-2000&#xff09;1.3 Windows NT系列&#xff08;1993-2001&#xff09;1.4 Windows XP及以后版…

微服务架构的性能优化:链路追踪与可观测性建设

&#x1f4cb; 目录 引言&#xff1a;微服务性能挑战微服务架构性能瓶颈分析可观测性体系概述链路追踪技术深度解析性能监控指标体系日志聚合与分析分布式追踪系统实现性能优化策略与实践自动化性能调优故障诊断与根因分析最佳实践与案例研究未来发展趋势 引言 随着微服务架…

ubuntu屏幕复制

在ubnuntu20中没有办法正常使用镜像功能,这里提供一下复制屏幕的操作. 使用xrandr查看所有的显示器情况 这里我发现自己的电脑没有办法直接设置分辨率,但是外接的显示器可以设置,从命令行来说就是设置: xrandr --output HDMI-0 --mode 1920x1080那怎么样才能将原生电脑屏幕换…

Android 线性布局中常见的冲突属性总结

1. gravity vs layout_gravity 冲突原因&#xff1a;两者作用对象不同&#xff0c;混用会导致行为异常。 区别&#xff1a; android:gravity&#xff1a;父容器的属性&#xff0c;控制子元素在容器内的对齐方式。android:layout_gravity&#xff1a;子元素的属性&#xff0c;控…

0x-4-Oracle 23 ai-sqlcl 25.1.1 独立安装-配置和优化

一、独立安装sqlcl 1. ​安装 Java 环境​ SQLcl 需要 Java 1.8.0_220 或更高版本&#xff0c; Oracle Linux9.6 上已经默认安装Oracle 23ai后Java 是11 lts版本 如果java jdk安装错误将遇上SQLcl困扰n多人的bug sql /nolog 错误&#xff1a;找不到或加载主类 oracle.dbto…