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 表示按 23 = 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…