ucOS_II移植:Stm32启动代码分析
生活随笔
收集整理的這篇文章主要介紹了
ucOS_II移植:Stm32启动代码分析
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
用的編譯工具是keil,在用keil建立stm32工程時(shí),一般會(huì)產(chǎn)生一個(gè)啟動(dòng)文件,STM32F10x.s,在st提供的庫(kù)函數(shù)里,用cortexm3_macro.s和stm32f10x_vector.s來(lái)代替這個(gè)文件。不過(guò)內(nèi)容都大同小異。
我在csdn上搜到了一個(gè)在stm32上移植好的ucos,打算在這個(gè)代碼的基礎(chǔ)上,添加注釋,先學(xué)別人的,然后再自己移植。
我獲得的這份例程,使用了startup_stm32f10x_md.s作為啟動(dòng)文件,其中,刪去了部分采用擴(kuò)展SRAM的代碼。
其文件內(nèi)容為
startup_stm32f10x_md.s
;******** (C) COPYRIGHT2010 STMicroelectronics ******************** ;* File Name? ?? ?? ? : startup_stm32f10x_md.s ;* Author? ?? ?? ?? ? : MCD Application Team ;* Version? ?? ?? ?? ?: V3.3.0 ;* Date? ?? ?? ?? ?? ?: 04/16/2010 ;* Description:STM32F10x Medium Density Devices vector table for RVMDK ;*? ?? ?? ?? ?? ?? ?? ? toolchain.?? ;*? ?? ?? ?? ?? ?? ?? ? This module performs: ;*? ?? ?? ?? ?? ?? ?? ? - Set the initial SP ;*? ?? ?? ?? ?? ?? ?? ? - Set the initial PC ==Reset_Handler ;*? ?? ?? ? - Set the vector table entries withthe exceptions ISR address ;*? ?? ?? ?? ?? ?? ?? ? - Configure the clocksystem ;*? ?? ?? ?- Branches to __main in the C library(which eventually ;*? ?? ?? ?? ?? ?? ?? ?? ?calls main()). ;*? ?? ?? ?? ?After Reset the CortexM3 processoris in Thread mode, ;*? ?? ?? ?? ? priority is Privileged, and theStack is set to Main. ;* <<< UseConfiguration Wizard in Context Menu >>>? ? ;*********************************************************************** ; THE PRESENT FIRMWAREWHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS ; WITH CODINGINFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. ; AS A RESULT, STMICROELECTRONICSSHALL NOT BE HELD LIABLE FOR ANY DIRECT, ; INDIRECT ORCONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE ; CONTENT OF SUCHFIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING ; INFORMATION CONTAINEDHEREIN IN CONNECTION WITH THEIR PRODUCTS. ;********************************************************************** ; Amount of memory (inbytes) allocated for Stack ; Tailor this value toyour application needs ; <h> StackConfiguration ;? ?<o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Stack_Size? ?? ?EQU? ? 0x00000400 ;定義堆棧大小 AREA? ?STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem? ?? ? SPACE??Stack_Size __initial_sp ;此處定義STACK段的程序,該段入口為_(kāi)_initial_sp,這是值在后面放在了0x00000000的位置處,作為MSP的初始值,一般程序 ;編譯的時(shí)候,由編譯器賦值。我的編譯器將其賦為0x20001138,如果用到了外接的SRAM,需要用 ;__initial_sp EQU0x20000000 + Stack_Size 來(lái)定義 ; <h> HeapConfiguration ;? ?<o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Heap_Size? ?? ? EQU? ? 0x00000200 AREA? ? HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem? ?? ???SPACE??Heap_Size __heap_limit PRESERVE8 THUMB ; Vector Table Mapped toAddress 0 at Reset ;下面是地址0x00000000 開(kāi)始處的中斷向量表,此段名RESET不可更改,是編譯器里默認(rèn)的起始段 AREA? ? RESET, DATA, READONLY EXPORT??__Vectors EXPORT??__Vectors_End EXPORT??__Vectors_Size __Vectors? ???DCD? ???__initial_sp? ?? ?? ?? ?? ?; Top of Stack DCD? ???Reset_Handler? ?? ?? ?? ???; Reset Handler DCD? ???NMI_Handler? ?? ?? ?? ?? ? ; NMI Handler DCD? ???HardFault_Handler? ?? ?; Hard Fault Handler DCD? ???MemManage_Handler? ???; MPU Fault Handler DCD? ???BusFault_Handler? ?? ? ; Bus Fault Handler DCD? ???UsageFault_Handler? ?; Usage Fault Handler DCD? ???0? ?? ?? ?? ?? ?? ?? ?? ???; Reserved DCD? ???0? ?? ?? ?? ?? ?? ?? ?? ???; Reserved DCD? ???0? ?? ?? ?? ?? ?? ?? ?? ???; Reserved DCD? ???0? ?? ?? ?? ?? ?? ?? ?? ???; Reserved DCD? ???SVC_Handler? ?? ?? ?? ?? ? ; SVCall Handler DCD? ???DebugMon_Handler? ?? ?? ???; Debug Monitor Handler DCD? ???0? ?? ?? ?? ?? ?? ?? ?? ???; Reserved ;DCD? ???PendSV_Handler? ?? ?? ?? ? ; PendSV Handler DCD? ? OSPendSV? ?? ?? ?? ?? ?? ? ;PendSV Handler(for uCOS-II) DCD? ???SysTick_Handler? ?? ?? ?? ?; SysTick Handler ; External Interrupts DCD? ???WWDG_IRQHandler? ?? ?? ?? ?; Window Watchdog DCD? ???PVD_IRQHandler? ?? ?? ?? ? ; PVD through EXTI Line detect DCD? ???TAMPER_IRQHandler? ?? ?? ? ; Tamper DCD? ???RTC_IRQHandler? ?? ?? ?? ? ; RTC DCD? ???FLASH_IRQHandler? ?? ?? ???; Flash DCD? ???RCC_IRQHandler? ?? ?? ?? ? ; RCC DCD? ???EXTI0_IRQHandler? ?? ?? ???; EXTI Line 0 DCD? ???EXTI1_IRQHandler? ?? ?? ???; EXTI Line 1 DCD? ???EXTI2_IRQHandler? ?? ?? ???; EXTI Line 2 DCD? ???EXTI3_IRQHandler? ?? ?? ???; EXTI Line 3 DCD? ???EXTI4_IRQHandler? ?? ?? ???; EXTI Line 4 DCD? ???DMA1_Channel1_IRQHandler ; DMA1 Channel 1 DCD? ???DMA1_Channel2_IRQHandler ; DMA1 Channel 2 DCD? ???DMA1_Channel3_IRQHandler ; DMA1 Channel 3 DCD? ???DMA1_Channel4_IRQHandler ; DMA1 Channel 4 DCD? ???DMA1_Channel5_IRQHandler ; DMA1 Channel 5 DCD? ???DMA1_Channel6_IRQHandler ; DMA1 Channel 6 DCD? ???DMA1_Channel7_IRQHandler ; DMA1 Channel 7 DCD? ???ADC1_2_IRQHandler? ?? ?? ? ; ADC1_2 DCD? ???USB_HP_CAN1_TX_IRQHandler; USB HighPriority or CAN1 TX DCD? ???USB_LP_CAN1_RX0_IRQHandler;USB Low??Priority or CAN1 RX0 DCD? ???CAN1_RX1_IRQHandler? ?? ???; CAN1 RX1 DCD? ???CAN1_SCE_IRQHandler? ?? ???; CAN1 SCE DCD? ???EXTI9_5_IRQHandler? ?? ?? ?; EXTI Line 9..5 DCD? ???TIM1_BRK_IRQHandler? ?? ???; TIM1 Break DCD? ???TIM1_UP_IRQHandler? ?? ?? ?; TIM1 Update DCD? ???TIM1_TRG_COM_IRQHandler? ?; TIM1 Trigger and Commutation DCD? ???TIM1_CC_IRQHandler? ?? ?? ?; TIM1 Capture Compare DCD? ???TIM2_IRQHandler? ?? ?? ?? ?; TIM2 DCD? ???TIM3_IRQHandler? ?? ?? ?? ?; TIM3 DCD? ???TIM4_IRQHandler? ?? ?? ?? ?; TIM4 DCD? ???I2C1_EV_IRQHandler? ?? ?? ?; I2C1 Event DCD? ???I2C1_ER_IRQHandler? ?? ?? ?; I2C1 Error DCD? ???I2C2_EV_IRQHandler? ?? ?? ?; I2C2 Event DCD? ???I2C2_ER_IRQHandler? ?? ?? ?; I2C2 Error DCD? ???SPI1_IRQHandler? ?? ?? ?? ?; SPI1 DCD? ???SPI2_IRQHandler? ?? ?? ?? ?; SPI2 DCD? ???USART1_IRQHandler? ?? ?? ? ; USART1 DCD? ???USART2_IRQHandler? ?? ?? ? ; USART2 DCD? ???USART3_IRQHandler? ?? ?? ? ; USART3 DCD? ???EXTI15_10_IRQHandler? ?? ? ; EXTI Line 15..10 DCD? ???RTCAlarm_IRQHandler? ?? ???; RTC Alarm through EXTI Line DCD? ???USBWakeUp_IRQHandler? ?? ? ; USB Wakeup from suspend __Vectors_End __Vectors_Size??EQU __Vectors_End - __Vectors AREA? ? |.text|, CODE, READONLY ; Reset handler Reset_Handler? ? PROC ;此處刪除了原有的關(guān)于擴(kuò)展SRAM的代碼,看來(lái)這個(gè)是默認(rèn)內(nèi)部SRAM的? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?EXPORT??Reset_Handler? ?? ?? ?? ? [WEAK] IMPORT __main IMPORT SystemInit? ?? ?;是初始化RCC外設(shè)等的函數(shù),原來(lái)的程序是在main起來(lái)之后初始化的 LDR? ???R0, =SystemInit? ?? ?? ?;這里多了一個(gè)SystemInit函數(shù)的調(diào)用,原來(lái)的是直接跳到__main BLX? ???R0? ?? ?? ?? ?? ?? ?? ?? ?? ? LDR? ???R0, =__main BX? ?? ?R0 ENDP ; Dummy ExceptionHandlers (infinite loops which can be modified) ;這一段的函數(shù)定義和聲明很是麻煩,其實(shí),只要在DCD前面,用命令I(lǐng)MPORT 來(lái)聲明一下也是可以的 NMI_Handler? ???PROC EXPORT??NMI_Handler? ?? ?? ?? ?? ? [WEAK] B? ?? ?. ENDP HardFault_Handler\ PROC EXPORT??HardFault_Handler? ?? ?? ? [WEAK] B? ?? ? . ENDP MemManage_Handler\ PROC EXPORT??MemManage_Handler? ?? ?? ? [WEAK] B? ?? ? . ENDP BusFault_Handler\ PROC EXPORT??BusFault_Handler? ?? ?? ???[WEAK] B? ?? ? . ENDP UsageFault_Handler\ PROC EXPORT??UsageFault_Handler? ?? ?? ?[WEAK] B? ?? ? . ENDP SVC_Handler? ???PROC EXPORT??SVC_Handler? ?? ?? ?? ?? ? [WEAK] B? ?? ? . ENDP DebugMon_Handler\ PROC EXPORT??DebugMon_Handler? ?? ?? ???[WEAK] B? ?? ? . ENDP ;PendSV_Handler??PROC ;? ?? ?? ?? ?? ? EXPORT??PendSV_Handler? ?? ?? ?? ? [WEAK] ; (for uCOS-II) OSPendSV? ?? ???PROC EXPORT??OSPendSV? ?? ?? ?? ?? ?? ? [WEAK] B? ?? ? . ENDP SysTick_Handler PROC EXPORT??SysTick_Handler? ?? ?? ?? ?[WEAK] B? ?? ? . ENDP Default_Handler PROC EXPORT??WWDG_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??PVD_IRQHandler? ?? ?? ?? ? [WEAK] EXPORT??TAMPER_IRQHandler? ?? ?? ? [WEAK] EXPORT??RTC_IRQHandler? ?? ?? ?? ? [WEAK] EXPORT??FLASH_IRQHandler? ?? ?? ???[WEAK] EXPORT??RCC_IRQHandler? ?? ?? ?? ? [WEAK] EXPORT??EXTI0_IRQHandler? ?? ?? ???[WEAK] EXPORT??EXTI1_IRQHandler? ?? ?? ???[WEAK] EXPORT??EXTI2_IRQHandler? ?? ?? ???[WEAK] EXPORT EXTI3_IRQHandler? ?? ?? ???[WEAK] EXPORT??EXTI4_IRQHandler? ?? ?? ???[WEAK] EXPORT??DMA1_Channel1_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel2_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel3_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel4_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel5_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel6_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel7_IRQHandler? ?[WEAK] EXPORT??ADC1_2_IRQHandler? ?? ?? ? [WEAK] EXPORT??USB_HP_CAN1_TX_IRQHandler??[WEAK] EXPORT??USB_LP_CAN1_RX0_IRQHandler [WEAK] EXPORT??CAN1_RX1_IRQHandler? ?? ???[WEAK] EXPORT??CAN1_SCE_IRQHandler? ?? ???[WEAK] EXPORT??EXTI9_5_IRQHandler? ?? ?? ?[WEAK] EXPORT??TIM1_BRK_IRQHandler? ?? ???[WEAK] EXPORT??TIM1_UP_IRQHandler? ?? ?? ?[WEAK] EXPORT??TIM1_TRG_COM_IRQHandler? ? [WEAK] EXPORT??TIM1_CC_IRQHandler? ?? ?? ?[WEAK] EXPORT??TIM2_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??TIM3_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??TIM4_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??I2C1_EV_IRQHandler? ?? ?? ?[WEAK] EXPORT??I2C1_ER_IRQHandler? ?? ?? ?[WEAK] EXPORT??I2C2_EV_IRQHandler? ?? ?? ?[WEAK] EXPORT??I2C2_ER_IRQHandler? ?? ?? ?[WEAK] EXPORT??SPI1_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??SPI2_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??USART1_IRQHandler? ?? ?? ? [WEAK] EXPORT??USART2_IRQHandler? ?? ?? ? [WEAK] EXPORT??USART3_IRQHandler? ?? ?? ? [WEAK] EXPORT EXTI15_10_IRQHandler? ?? ? [WEAK] EXPORT??RTCAlarm_IRQHandler? ?? ???[WEAK] EXPORT??USBWakeUp_IRQHandler? ?? ? [WEAK] WWDG_IRQHandler PVD_IRQHandler TAMPER_IRQHandler RTC_IRQHandler FLASH_IRQHandler RCC_IRQHandler EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler DMA1_Channel1_IRQHandler DMA1_Channel2_IRQHandler DMA1_Channel3_IRQHandler DMA1_Channel4_IRQHandler DMA1_Channel5_IRQHandler DMA1_Channel6_IRQHandler DMA1_Channel7_IRQHandler ADC1_2_IRQHandler USB_HP_CAN1_TX_IRQHandler USB_LP_CAN1_RX0_IRQHandler CAN1_RX1_IRQHandler CAN1_SCE_IRQHandler EXTI9_5_IRQHandler TIM1_BRK_IRQHandler TIM1_UP_IRQHandler TIM1_TRG_COM_IRQHandler TIM1_CC_IRQHandler TIM2_IRQHandler TIM3_IRQHandler TIM4_IRQHandler I2C1_EV_IRQHandler I2C1_ER_IRQHandler I2C2_EV_IRQHandler I2C2_ER_IRQHandler SPI1_IRQHandler SPI2_IRQHandler USART1_IRQHandler USART2_IRQHandler USART3_IRQHandler EXTI15_10_IRQHandler RTCAlarm_IRQHandler USBWakeUp_IRQHandler B? ?? ?. ENDP ALIGN ;******************************************************************************* ; User Stack and Heapinitialization ;******************************************************************************* IF? ?? ?:DEF:__MICROLIB? ?? ?? ??? ;這里是定義了microlib的情況,一般用在單片機(jī)上,都定義這個(gè)庫(kù) EXPORT??__initial_sp EXPORT??__heap_base EXPORT??__heap_limit ELSE IMPORT??__use_two_region_memory EXPORT??__user_initial_stackheap __user_initial_stackheap LDR? ???R0, = Heap_Mem LDR? ???R1, =(Stack_Mem + Stack_Size) LDR? ???R2, = (Heap_Mem +??Heap_Size) LDR? ? R3, = Stack_Mem BX? ?? ?LR ALIGN ENDIF END ;******************* (C)COPYRIGHT 2010 STMicroelectronics *****END OF FILE***** startup_stm32f10x_md.s結(jié)束
;******** (C) COPYRIGHT2010 STMicroelectronics ******************** ;* File Name? ?? ?? ? : startup_stm32f10x_md.s ;* Author? ?? ?? ?? ? : MCD Application Team ;* Version? ?? ?? ?? ?: V3.3.0 ;* Date? ?? ?? ?? ?? ?: 04/16/2010 ;* Description:STM32F10x Medium Density Devices vector table for RVMDK ;*? ?? ?? ?? ?? ?? ?? ? toolchain.?? ;*? ?? ?? ?? ?? ?? ?? ? This module performs: ;*? ?? ?? ?? ?? ?? ?? ? - Set the initial SP ;*? ?? ?? ?? ?? ?? ?? ? - Set the initial PC ==Reset_Handler ;*? ?? ?? ? - Set the vector table entries withthe exceptions ISR address ;*? ?? ?? ?? ?? ?? ?? ? - Configure the clocksystem ;*? ?? ?? ?- Branches to __main in the C library(which eventually ;*? ?? ?? ?? ?? ?? ?? ?? ?calls main()). ;*? ?? ?? ?? ?After Reset the CortexM3 processoris in Thread mode, ;*? ?? ?? ?? ? priority is Privileged, and theStack is set to Main. ;* <<< UseConfiguration Wizard in Context Menu >>>? ? ;*********************************************************************** ; THE PRESENT FIRMWAREWHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS ; WITH CODINGINFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. ; AS A RESULT, STMICROELECTRONICSSHALL NOT BE HELD LIABLE FOR ANY DIRECT, ; INDIRECT ORCONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE ; CONTENT OF SUCHFIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING ; INFORMATION CONTAINEDHEREIN IN CONNECTION WITH THEIR PRODUCTS. ;********************************************************************** ; Amount of memory (inbytes) allocated for Stack ; Tailor this value toyour application needs ; <h> StackConfiguration ;? ?<o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Stack_Size? ?? ?EQU? ? 0x00000400 ;定義堆棧大小 AREA? ?STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem? ?? ? SPACE??Stack_Size __initial_sp ;此處定義STACK段的程序,該段入口為_(kāi)_initial_sp,這是值在后面放在了0x00000000的位置處,作為MSP的初始值,一般程序 ;編譯的時(shí)候,由編譯器賦值。我的編譯器將其賦為0x20001138,如果用到了外接的SRAM,需要用 ;__initial_sp EQU0x20000000 + Stack_Size 來(lái)定義 ; <h> HeapConfiguration ;? ?<o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Heap_Size? ?? ? EQU? ? 0x00000200 AREA? ? HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem? ?? ???SPACE??Heap_Size __heap_limit PRESERVE8 THUMB ; Vector Table Mapped toAddress 0 at Reset ;下面是地址0x00000000 開(kāi)始處的中斷向量表,此段名RESET不可更改,是編譯器里默認(rèn)的起始段 AREA? ? RESET, DATA, READONLY EXPORT??__Vectors EXPORT??__Vectors_End EXPORT??__Vectors_Size __Vectors? ???DCD? ???__initial_sp? ?? ?? ?? ?? ?; Top of Stack DCD? ???Reset_Handler? ?? ?? ?? ???; Reset Handler DCD? ???NMI_Handler? ?? ?? ?? ?? ? ; NMI Handler DCD? ???HardFault_Handler? ?? ?; Hard Fault Handler DCD? ???MemManage_Handler? ???; MPU Fault Handler DCD? ???BusFault_Handler? ?? ? ; Bus Fault Handler DCD? ???UsageFault_Handler? ?; Usage Fault Handler DCD? ???0? ?? ?? ?? ?? ?? ?? ?? ???; Reserved DCD? ???0? ?? ?? ?? ?? ?? ?? ?? ???; Reserved DCD? ???0? ?? ?? ?? ?? ?? ?? ?? ???; Reserved DCD? ???0? ?? ?? ?? ?? ?? ?? ?? ???; Reserved DCD? ???SVC_Handler? ?? ?? ?? ?? ? ; SVCall Handler DCD? ???DebugMon_Handler? ?? ?? ???; Debug Monitor Handler DCD? ???0? ?? ?? ?? ?? ?? ?? ?? ???; Reserved ;DCD? ???PendSV_Handler? ?? ?? ?? ? ; PendSV Handler DCD? ? OSPendSV? ?? ?? ?? ?? ?? ? ;PendSV Handler(for uCOS-II) DCD? ???SysTick_Handler? ?? ?? ?? ?; SysTick Handler ; External Interrupts DCD? ???WWDG_IRQHandler? ?? ?? ?? ?; Window Watchdog DCD? ???PVD_IRQHandler? ?? ?? ?? ? ; PVD through EXTI Line detect DCD? ???TAMPER_IRQHandler? ?? ?? ? ; Tamper DCD? ???RTC_IRQHandler? ?? ?? ?? ? ; RTC DCD? ???FLASH_IRQHandler? ?? ?? ???; Flash DCD? ???RCC_IRQHandler? ?? ?? ?? ? ; RCC DCD? ???EXTI0_IRQHandler? ?? ?? ???; EXTI Line 0 DCD? ???EXTI1_IRQHandler? ?? ?? ???; EXTI Line 1 DCD? ???EXTI2_IRQHandler? ?? ?? ???; EXTI Line 2 DCD? ???EXTI3_IRQHandler? ?? ?? ???; EXTI Line 3 DCD? ???EXTI4_IRQHandler? ?? ?? ???; EXTI Line 4 DCD? ???DMA1_Channel1_IRQHandler ; DMA1 Channel 1 DCD? ???DMA1_Channel2_IRQHandler ; DMA1 Channel 2 DCD? ???DMA1_Channel3_IRQHandler ; DMA1 Channel 3 DCD? ???DMA1_Channel4_IRQHandler ; DMA1 Channel 4 DCD? ???DMA1_Channel5_IRQHandler ; DMA1 Channel 5 DCD? ???DMA1_Channel6_IRQHandler ; DMA1 Channel 6 DCD? ???DMA1_Channel7_IRQHandler ; DMA1 Channel 7 DCD? ???ADC1_2_IRQHandler? ?? ?? ? ; ADC1_2 DCD? ???USB_HP_CAN1_TX_IRQHandler; USB HighPriority or CAN1 TX DCD? ???USB_LP_CAN1_RX0_IRQHandler;USB Low??Priority or CAN1 RX0 DCD? ???CAN1_RX1_IRQHandler? ?? ???; CAN1 RX1 DCD? ???CAN1_SCE_IRQHandler? ?? ???; CAN1 SCE DCD? ???EXTI9_5_IRQHandler? ?? ?? ?; EXTI Line 9..5 DCD? ???TIM1_BRK_IRQHandler? ?? ???; TIM1 Break DCD? ???TIM1_UP_IRQHandler? ?? ?? ?; TIM1 Update DCD? ???TIM1_TRG_COM_IRQHandler? ?; TIM1 Trigger and Commutation DCD? ???TIM1_CC_IRQHandler? ?? ?? ?; TIM1 Capture Compare DCD? ???TIM2_IRQHandler? ?? ?? ?? ?; TIM2 DCD? ???TIM3_IRQHandler? ?? ?? ?? ?; TIM3 DCD? ???TIM4_IRQHandler? ?? ?? ?? ?; TIM4 DCD? ???I2C1_EV_IRQHandler? ?? ?? ?; I2C1 Event DCD? ???I2C1_ER_IRQHandler? ?? ?? ?; I2C1 Error DCD? ???I2C2_EV_IRQHandler? ?? ?? ?; I2C2 Event DCD? ???I2C2_ER_IRQHandler? ?? ?? ?; I2C2 Error DCD? ???SPI1_IRQHandler? ?? ?? ?? ?; SPI1 DCD? ???SPI2_IRQHandler? ?? ?? ?? ?; SPI2 DCD? ???USART1_IRQHandler? ?? ?? ? ; USART1 DCD? ???USART2_IRQHandler? ?? ?? ? ; USART2 DCD? ???USART3_IRQHandler? ?? ?? ? ; USART3 DCD? ???EXTI15_10_IRQHandler? ?? ? ; EXTI Line 15..10 DCD? ???RTCAlarm_IRQHandler? ?? ???; RTC Alarm through EXTI Line DCD? ???USBWakeUp_IRQHandler? ?? ? ; USB Wakeup from suspend __Vectors_End __Vectors_Size??EQU __Vectors_End - __Vectors AREA? ? |.text|, CODE, READONLY ; Reset handler Reset_Handler? ? PROC ;此處刪除了原有的關(guān)于擴(kuò)展SRAM的代碼,看來(lái)這個(gè)是默認(rèn)內(nèi)部SRAM的? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?EXPORT??Reset_Handler? ?? ?? ?? ? [WEAK] IMPORT __main IMPORT SystemInit? ?? ?;是初始化RCC外設(shè)等的函數(shù),原來(lái)的程序是在main起來(lái)之后初始化的 LDR? ???R0, =SystemInit? ?? ?? ?;這里多了一個(gè)SystemInit函數(shù)的調(diào)用,原來(lái)的是直接跳到__main BLX? ???R0? ?? ?? ?? ?? ?? ?? ?? ?? ? LDR? ???R0, =__main BX? ?? ?R0 ENDP ; Dummy ExceptionHandlers (infinite loops which can be modified) ;這一段的函數(shù)定義和聲明很是麻煩,其實(shí),只要在DCD前面,用命令I(lǐng)MPORT 來(lái)聲明一下也是可以的 NMI_Handler? ???PROC EXPORT??NMI_Handler? ?? ?? ?? ?? ? [WEAK] B? ?? ?. ENDP HardFault_Handler\ PROC EXPORT??HardFault_Handler? ?? ?? ? [WEAK] B? ?? ? . ENDP MemManage_Handler\ PROC EXPORT??MemManage_Handler? ?? ?? ? [WEAK] B? ?? ? . ENDP BusFault_Handler\ PROC EXPORT??BusFault_Handler? ?? ?? ???[WEAK] B? ?? ? . ENDP UsageFault_Handler\ PROC EXPORT??UsageFault_Handler? ?? ?? ?[WEAK] B? ?? ? . ENDP SVC_Handler? ???PROC EXPORT??SVC_Handler? ?? ?? ?? ?? ? [WEAK] B? ?? ? . ENDP DebugMon_Handler\ PROC EXPORT??DebugMon_Handler? ?? ?? ???[WEAK] B? ?? ? . ENDP ;PendSV_Handler??PROC ;? ?? ?? ?? ?? ? EXPORT??PendSV_Handler? ?? ?? ?? ? [WEAK] ; (for uCOS-II) OSPendSV? ?? ???PROC EXPORT??OSPendSV? ?? ?? ?? ?? ?? ? [WEAK] B? ?? ? . ENDP SysTick_Handler PROC EXPORT??SysTick_Handler? ?? ?? ?? ?[WEAK] B? ?? ? . ENDP Default_Handler PROC EXPORT??WWDG_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??PVD_IRQHandler? ?? ?? ?? ? [WEAK] EXPORT??TAMPER_IRQHandler? ?? ?? ? [WEAK] EXPORT??RTC_IRQHandler? ?? ?? ?? ? [WEAK] EXPORT??FLASH_IRQHandler? ?? ?? ???[WEAK] EXPORT??RCC_IRQHandler? ?? ?? ?? ? [WEAK] EXPORT??EXTI0_IRQHandler? ?? ?? ???[WEAK] EXPORT??EXTI1_IRQHandler? ?? ?? ???[WEAK] EXPORT??EXTI2_IRQHandler? ?? ?? ???[WEAK] EXPORT EXTI3_IRQHandler? ?? ?? ???[WEAK] EXPORT??EXTI4_IRQHandler? ?? ?? ???[WEAK] EXPORT??DMA1_Channel1_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel2_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel3_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel4_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel5_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel6_IRQHandler? ?[WEAK] EXPORT??DMA1_Channel7_IRQHandler? ?[WEAK] EXPORT??ADC1_2_IRQHandler? ?? ?? ? [WEAK] EXPORT??USB_HP_CAN1_TX_IRQHandler??[WEAK] EXPORT??USB_LP_CAN1_RX0_IRQHandler [WEAK] EXPORT??CAN1_RX1_IRQHandler? ?? ???[WEAK] EXPORT??CAN1_SCE_IRQHandler? ?? ???[WEAK] EXPORT??EXTI9_5_IRQHandler? ?? ?? ?[WEAK] EXPORT??TIM1_BRK_IRQHandler? ?? ???[WEAK] EXPORT??TIM1_UP_IRQHandler? ?? ?? ?[WEAK] EXPORT??TIM1_TRG_COM_IRQHandler? ? [WEAK] EXPORT??TIM1_CC_IRQHandler? ?? ?? ?[WEAK] EXPORT??TIM2_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??TIM3_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??TIM4_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??I2C1_EV_IRQHandler? ?? ?? ?[WEAK] EXPORT??I2C1_ER_IRQHandler? ?? ?? ?[WEAK] EXPORT??I2C2_EV_IRQHandler? ?? ?? ?[WEAK] EXPORT??I2C2_ER_IRQHandler? ?? ?? ?[WEAK] EXPORT??SPI1_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??SPI2_IRQHandler? ?? ?? ?? ?[WEAK] EXPORT??USART1_IRQHandler? ?? ?? ? [WEAK] EXPORT??USART2_IRQHandler? ?? ?? ? [WEAK] EXPORT??USART3_IRQHandler? ?? ?? ? [WEAK] EXPORT EXTI15_10_IRQHandler? ?? ? [WEAK] EXPORT??RTCAlarm_IRQHandler? ?? ???[WEAK] EXPORT??USBWakeUp_IRQHandler? ?? ? [WEAK] WWDG_IRQHandler PVD_IRQHandler TAMPER_IRQHandler RTC_IRQHandler FLASH_IRQHandler RCC_IRQHandler EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler DMA1_Channel1_IRQHandler DMA1_Channel2_IRQHandler DMA1_Channel3_IRQHandler DMA1_Channel4_IRQHandler DMA1_Channel5_IRQHandler DMA1_Channel6_IRQHandler DMA1_Channel7_IRQHandler ADC1_2_IRQHandler USB_HP_CAN1_TX_IRQHandler USB_LP_CAN1_RX0_IRQHandler CAN1_RX1_IRQHandler CAN1_SCE_IRQHandler EXTI9_5_IRQHandler TIM1_BRK_IRQHandler TIM1_UP_IRQHandler TIM1_TRG_COM_IRQHandler TIM1_CC_IRQHandler TIM2_IRQHandler TIM3_IRQHandler TIM4_IRQHandler I2C1_EV_IRQHandler I2C1_ER_IRQHandler I2C2_EV_IRQHandler I2C2_ER_IRQHandler SPI1_IRQHandler SPI2_IRQHandler USART1_IRQHandler USART2_IRQHandler USART3_IRQHandler EXTI15_10_IRQHandler RTCAlarm_IRQHandler USBWakeUp_IRQHandler B? ?? ?. ENDP ALIGN ;******************************************************************************* ; User Stack and Heapinitialization ;******************************************************************************* IF? ?? ?:DEF:__MICROLIB? ?? ?? ??? ;這里是定義了microlib的情況,一般用在單片機(jī)上,都定義這個(gè)庫(kù) EXPORT??__initial_sp EXPORT??__heap_base EXPORT??__heap_limit ELSE IMPORT??__use_two_region_memory EXPORT??__user_initial_stackheap __user_initial_stackheap LDR? ???R0, = Heap_Mem LDR? ???R1, =(Stack_Mem + Stack_Size) LDR? ???R2, = (Heap_Mem +??Heap_Size) LDR? ? R3, = Stack_Mem BX? ?? ?LR ALIGN ENDIF END ;******************* (C)COPYRIGHT 2010 STMicroelectronics *****END OF FILE***** startup_stm32f10x_md.s結(jié)束
總結(jié)
以上是生活随笔為你收集整理的ucOS_II移植:Stm32启动代码分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 快速排序法详解
- 下一篇: .h头文件 .lib库文件 .dll动态