日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ucOS_II移植:Stm32启动代码分析

發布時間:2024/4/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ucOS_II移植:Stm32启动代码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用的編譯工具是keil,在用keil建立stm32工程時,一般會產生一個啟動文件,STM32F10x.s,在st提供的庫函數里,用cortexm3_macro.s和stm32f10x_vector.s來代替這個文件。不過內容都大同小異。 我在csdn上搜到了一個在stm32上移植好的ucos,打算在這個代碼的基礎上,添加注釋,先學別人的,然后再自己移植。 我獲得的這份例程,使用了startup_stm32f10x_md.s作為啟動文件,其中,刪去了部分采用擴展SRAM的代碼。 其文件內容為 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段的程序,該段入口為__initial_sp,這是值在后面放在了0x00000000的位置處,作為MSP的初始值,一般程序 ;編譯的時候,由編譯器賦值。我的編譯器將其賦為0x20001138,如果用到了外接的SRAM,需要用 ;__initial_sp EQU0x20000000 + Stack_Size 來定義 ; <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 開始處的中斷向量表,此段名RESET不可更改,是編譯器里默認的起始段 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 ;此處刪除了原有的關于擴展SRAM的代碼,看來這個是默認內部SRAM的? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?EXPORT??Reset_Handler? ?? ?? ?? ? [WEAK] IMPORT __main IMPORT SystemInit? ?? ?;是初始化RCC外設等的函數,原來的程序是在main起來之后初始化的 LDR? ???R0, =SystemInit? ?? ?? ?;這里多了一個SystemInit函數的調用,原來的是直接跳到__main BLX? ???R0? ?? ?? ?? ?? ?? ?? ?? ?? ? LDR? ???R0, =__main BX? ?? ?R0 ENDP ; Dummy ExceptionHandlers (infinite loops which can be modified) ;這一段的函數定義和聲明很是麻煩,其實,只要在DCD前面,用命令IMPORT 來聲明一下也是可以的 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的情況,一般用在單片機上,都定義這個庫 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結束

總結

以上是生活随笔為你收集整理的ucOS_II移植:Stm32启动代码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。