Cortex-M3匯編-啟動代碼分析_第1頁
Cortex-M3匯編-啟動代碼分析_第2頁
Cortex-M3匯編-啟動代碼分析_第3頁
Cortex-M3匯編-啟動代碼分析_第4頁
Cortex-M3匯編-啟動代碼分析_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、先在RAM中分配系統(tǒng)使用的棧,RAM的起始地址為0 x2000_0000 然后在RAM中分配變量使用的堆然后在CODE 區(qū) flash 分配中斷向量表,flash 的起始地址為0 x0800_0000 ,該中斷向量表就從這個起始地址開始分配分配完成后,再定義和實現(xiàn)相應的中斷函數(shù),所有的中斷函數(shù)全部帶有 weak 特性,即弱定義,如果編譯器發(fā)現(xiàn)在別處文件中定義了同名函數(shù),在鏈接時用別處的地址進行鏈接。中斷函數(shù)僅僅實現(xiàn)了Reset_Handler 其他要么是死循環(huán),要么僅僅定義了函數(shù)名稱,當 STM32 遇到復位信號STM32 被設置為從內(nèi)部FLASH啟動時(這也是最常見的一種情況)后,CPU-M

2、3會自動從從 0 x0800_0000 處取出棧頂?shù)刂反娣庞贛SP 寄存器,0 x0800_0004 處取出復位中斷服務入口地址放入PC 寄存器,繼而執(zhí)行復位中斷服務程序Reset_Handler,Reset_Handler 僅僅執(zhí)行了兩個函數(shù)調(diào)用一個是 SystemInit ,另一個 _mainSystemInit 定 義 在system_stm32f10 x.c中主要初始化了STM的 時 鐘系統(tǒng) :HSIHSELSILSEPLLSYSCLKUSBCLKAPECLK等等._main 函數(shù)由編譯器生成,負責初始化棧、堆等,并在最后跳轉(zhuǎn)到用戶自定義的 main 函數(shù),來到 C 的世界。Stack

3、_Size EQU 0 x00000400 / 定義堆棧大小 AREA STACK NOINIT READWRITE ALIGN3 / 定義一個數(shù)據(jù)段 按 8 字節(jié)對齊 AREA 偽指令用于定義一個代碼段或數(shù)據(jù)段NOINIT :指定此數(shù)據(jù)段僅僅保留了內(nèi)存單元,而沒有將各初始值寫入內(nèi)存單元,或者將各個內(nèi)存單元值初始化為0Stack_Mem SPACE Stack_Size / 保留Stack_Size 大小的堆??臻g來分配連續(xù)Stack_Size 字節(jié)的存儲單元并初始化為0_initial_sp /標號,代表堆棧頂部地址,后面有用/此標號有一層隱含的意思那就是在M3 中堆棧是滿遞減堆棧,/因為它

4、指定了堆棧指針位于堆棧的高地址(在/Stack_Mem之后)Heap Configuration Heap Size in BytesHeap_Size EQU0 x00000200 / 定義堆空間大小AREA HEAP NOINITREADWRITE ALIGN3 /定義一個數(shù)據(jù)段,8 字節(jié)對齊_heap_base /標號,代表堆末底部地址, 后面有用 Heap_MemSPACE Heap_Size / 保留 Heap_Size 的堆空間 _heap_limit /標號,代表堆界限地址,后面有用PRESERVE8指令指定當前文件保持堆棧八字節(jié)對齊。它設置PRES8編譯屬性以通知鏈接器。鏈接器

5、檢查要求堆棧八字節(jié)對齊的任何代碼是否僅由保持堆棧八字節(jié)對齊的代碼直接或間接地調(diào)用。PRESERVE8 / 指示編譯器8 字節(jié)對齊THUMB /指示編譯器以后的指令為THUMB指令中斷向量表定義在MDK生成的分散加載文件中,RESET被設置在flash的0地址處,這樣就規(guī)定了向量表的地址。 Vector Table Mapped to Address 0 at Reset AREA RESET DATA READONLY / 定義只讀數(shù)據(jù)段,其實放在CODE 區(qū),位于0 地址EXPORT_Vectors EXPORT : 在程序中聲明一個全局的標號_Vectors,該標號可在其他的文件中引用EX

6、PORT_Vectors_End EXPORT _Vectors_Size_Vectors DCD_initial_sp Top of Stack 給 _initial_sp 分配 4 字節(jié) 32 位的地址 0 x0 DCD Reset_Handler Reset Handler 給標號ResetHandler 分配地址為0 x00000004 DCD NMI_HandlerNMI Handler給標號NMIHandler分配地址0 x00000008DCD HardFault_Handler Hard Fault Handler DCDMemManage_Handler MPU Fault

7、Handler DCDBusFault_Handler Bus Fault Handler DCD UsageFault_HandlerUsage Fault Handler DCD 0 Reserved 這種形式就是保留地址,不給任何標號分配DCD 0 Reserved DCD 0 ReservedDCD 0 Reserved DCD SVC_Handler SVCall Handler DCDDebugMon_Handler Debug Monitor Handler DCD 0 ReservedDCD PendSV_Handler PendSV Handler DCDSysTick_Ha

8、ndler SysTick Handler External Interrupts DCDWWDG_IRQHandler Window Watchdog DCDPVD_IRQHandler PVD through EXTI Line detect DCDTAMPER_IRQHandler Tamper DCD RTC_IRQHandler RTCDCD FLASH_IRQHandler Flash DCD RCC_IRQHandler RCCDCD EXTI0_IRQHandler EXTI Line 0 DCDEXTI1_IRQHandler EXTI Line 1 DCD EXTI2_IR

9、QHandlerEXTI Line 2 DCD EXTI3_IRQHandler EXTI Line 3DCDEXTI4_IRQHandler EXTI Line 4DCDDMA1_Channel1_IRQHandler DMA1 Channel 1DCDDMA1_Channel2_IRQHandler DMA1 Channel 2DCDDMA1_Channel3_IRQHandler DMA1 Channel 3DCDDMA1_Channel4_IRQHandler DMA1 Channel 4DCDDMA1_Channel5_IRQHandler DMA1 Channel 5DCDDMA1

10、_Channel6_IRQHandler DMA1 Channel 6DCDDMA1_Channel7_IRQHandler DMA1 Channel 7DCDADC1_2_IRQHandler ADC1 ADC2DCDUSB_HP_CAN1_TX_IRQHandler USB High Priority or CAN1TXDCD USB_L P_CAN1_RX0_IRQHandler USB Low Priority or CAN1 RX0DCD CAN1_RX1_IRQHandler CAN1RX1DCD CAN1_SCE_IRQHandler CAN1 SCEDCDEXTI9_5_IRQ

11、Handler EXTI Line 9.5DCDTIM1_BRK_IRQHandler TIM1 BreakDCDTIM1_UP_IRQHandler TIM1 UpdateDCDTIM1_TRG_COM_IRQHandler TIM1 Trigger andCommutationDCD TIM1_CC_IRQHandler TIM1 CaptureCompareDCD TIM2_IRQHandler TIM2DCDTIM3_IRQHandler TIM3DCD TIM4_IRQHandler TIM4DCDI2C1_EV_IRQHandler I2C1 EventDCD I2C1_ER_IR

12、QHandlerI2C1 ErrorDCD I2C2_EV_IRQHandler I2C2 EventDCDI2C2_ER_IRQHandler I2C2 ErrorDCD SPI1_IRQHandlerSPI1DCD SPI2_IRQHandler SPI2DCD USART1_IRQHandlerUSART1DCD USART2_IRQHandler USART2DCDUSART3_IRQHandler USART3DCD EXTI15_10_IRQHandlerEXTI Line 15.10DCD RTCAlarm_IRQHandler RTC Alarmthrough EXTI Lin

13、eDCD USBWakeUp_IRQHandler USBWakeup from suspendDCD TIM8_BRK_IRQHandler TIM8BreakDCD TIM8_UP_IRQHandler TIM8 UpdateDCDTIM8_TRG_COM_IRQHandler TIM8 Trigger andCommutationDCD TIM8_CC_IRQHandler TIM8 CaptureCompareDCD ADC3_IRQHandler ADC3DCDFSMC_IRQHandler FSMCDCD SDIO_IRQHandler SDIODCDTIM5_IRQHandler

14、 TIM5DCD SPI3_IRQHandler SPI3DCDUART4_IRQHandler UART4DCD UART5_IRQHandlerUART5 DCD TIM6_IRQHandler TIM6 DCDTIM7_IRQHandler TIM7 DCD DMA2_Channel1_IRQHandlerDMA2 Channel1 DCD DMA2_Channel2_IRQHandler DMA2Channel2 DCD DMA2_Channel3_IRQHandler DMA2Channel3 DCD DMA2_Channel4_5_IRQHandler DMA2Channel4 C

15、hannel5_Vectors_End_Vectors_Size EQU_Vectors_End - _Vectors AREA .text CODE READONLY代碼段定義Reset Handler 利用PROC、 ENDP 這一對偽指令把程序段分為若干個過程,使程序的結(jié)構(gòu)加清晰Reset_Handler PROC 過程的開始EXPORT Reset_HandlerWEAKWEAK弱定義,意思是如果在別處也定義該標號函數(shù),在鏈接時用別處的地址。如果沒有其它定方定義,編譯器也不報錯,以此處地址進行鏈接。EXPORT提示編譯器該標號可以為外部文件引用。IMPORT _main通知編譯器要使用

16、的標號在其他文件IMPORT SystemInit LDR R0SystemInit BLX R0 BX是ARM指令集和THUMB指令集之間程序的跳轉(zhuǎn)LDR R0 _main使用 “”表示LDR目前是偽指令不是標準指令。這里是把_main 的地址賦給RO 。BX R0 BX是 ARM指令集和THUMB指令集之間程序的跳轉(zhuǎn)ENDP 過程的結(jié)束Dummy Exception Handlers infiniteloops which can be modifiedNMI_Handler PROC EXPORTNMI_Handler WEAK B .原地跳轉(zhuǎn)即無限循環(huán),ENDPHardFault_Ha

17、ndler PROC EXPORT HardFault_HandlerWEAK B . ENDPMemManage_Handler PROC EXPORTMemManage_Handler WEAK B . ENDPBusFault_HandlerPROC EXPORT BusFault_Handler WEAK B .ENDPUsageFault_Handler PROC EXPORTUsageFault_Handler WEAK B . ENDPSVC_Handler PROCEXPORT SVC_Handler WEAK B . ENDPDebugMon_HandlerPROC EXPO

18、RT DebugMon_Handler WEAK B .ENDPPendSV_Handler PROC EXPORT PendSV_HandlerWEAK B . ENDPSysTick_Handler PROC EXPORTSysTick_Handler WEAK B . ENDPDefault_Handler PROCEXPORT WWDG_IRQHandler WEAK EXPORTPVD_IRQHandler WEAK EXPORT TAMPER_IRQHandlerWEAK EXPORT RTC_IRQHandler WEAK EXPORTFLASH_IRQHandler WEAK

19、EXPORT RCC_IRQHandlerWEAK EXPORT EXTI0_IRQHandler WEAK EXPORTEXTI1_IRQHandler WEAK EXPORT EXTI2_IRQHandlerWEAK EXPORT EXTI3_IRQHandler WEAK EXPORTEXTI4_IRQHandler WEAK EXPORTDMA1_Channel1_IRQHandler WEAK EXPORTDMA1_Channel2_IRQHandler WEAK EXPORTDMA1_Channel3_IRQHandler WEAK EXPORTDMA1_Channel4_IRQH

20、andler WEAK EXPORTDMA1_Channel5_IRQHandler WEAK EXPORTDMA1_Channel6_IRQHandler WEAK EXPORTDMA1_Channel7_IRQHandler WEAK EXPORTADC1_2_IRQHandler WEAK EXPORTUSB_HP_CAN1_TX_IRQHandler WEAK EXPORTUSB_LP_CAN1_RX0_IRQHandler WEAK EXPORTCAN1_RX1_IRQHandler WEAK EXPORTCAN1_SCE_IRQHandler WEAK EXPORTEXTI9_5_

21、IRQHandler WEAK EXPORTTIM1_BRK_IRQHandler WEAK EXPORTTIM1_UP_IRQHandler WEAK EXPORTTIM1_TRG_COM_IRQHandler WEAK EXPORTTIM1_CC_IRQHandler WEAK EXPORT TIM2_IRQHandlerWEAK EXPORT TIM3_IRQHandler WEAK EXPORTTIM4_IRQHandler WEAK EXPORT I2C1_EV_IRQHandlerWEAK EXPORT I2C1_ER_IRQHandler WEAK EXPORTI2C2_EV_I

22、RQHandler WEAK EXPORTI2C2_ER_IRQHandler WEAK EXPORT SPI1_IRQHandlerWEAK EXPORT SPI2_IRQHandler WEAK EXPORTUSART1_IRQHandler WEAK EXPORTUSART2_IRQHandler WEAK EXPORTUSART3_IRQHandler WEAK EXPORTEXTI15_10_IRQHandler WEAK EXPORTRTCAlarm_IRQHandler WEAK EXPORTUSBWakeUp_IRQHandler WEAK EXPORTTIM8_BRK_IRQ

23、Handler WEAK EXPORTTIM8_UP_IRQHandler WEAK EXPORTTIM8_TRG_COM_IRQHandler WEAK EXPORTTIM8_CC_IRQHandler WEAK EXPORT ADC3_IRQHandlerWEAK EXPORT FSMC_IRQHandler WEAK EXPORTSDIO_IRQHandler WEAK EXPORT TIM5_IRQHandlerWEAK EXPORT SPI3_IRQHandler WEAK EXPORTUART4_IRQHandler WEAK EXPORT UART5_IRQHandlerWEAK

24、 EXPORT TIM6_IRQHandler WEAK EXPORTTIM7_IRQHandler WEAK EXPORTDMA2_Channel1_IRQHandler WEAK EXPORTDMA2_Channel2_IRQHandler WEAK EXPORTDMA2_Channel3_IRQHandler WEAK EXPORTDMA2_Channel4_5_IRQHandlerWEAKWWDG_IRQHandlerPVD_IRQHandlerTAMPER_IRQHandlerRTC_IRQHandlerFLASH_IRQHandlerRCC_IRQHandlerEXTI0_IRQH

25、andlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandlerDMA1_Channel1_IRQHandlerDMA1_Channel2_IRQHandlerDMA1_Channel3_IRQHandlerDMA1_Channel4_IRQHandlerDMA1_Channel5_IRQHandlerDMA1_Channel6_IRQHandlerDMA1_Channel7_IRQHandlerADC1_2_IRQHandlerUSB_HP_CAN1_TX_IRQHandlerUSB_LP_CAN1_RX0_IRQH

26、andlerCAN1_RX1_IRQHandlerCAN1_SCE_IRQHandlerEXTI9_5_IRQHandlerTIM1_BRK_IRQHandlerTIM1_UP_IRQHandlerTIM1_TRG_COM_IRQHandlerTIM1_CC_IRQHandlerTIM2_IRQHandlerTIM3_IRQHandlerT IM4_IRQHandlerI2C1_EV_IRQHandlerI2C1_ER_IRQHandler I2C2_EV_IRQHandlerI2C2_ER_IRQHandlerSPI1_IRQHandler SPI2_IRQHandlerUSART1_IRQHandlerUSART2_IRQHandler USART3_IRQHandlerEXTI15_10_IRQHandlerRTCAlarm_IR QHandlerUSBWakeUp_IRQHandlerTIM8_BRK_IRQHandlerT IM8_UP_IRQHandlerTIM8_TRG_COM_IRQHandlerTIM8_C C_IRQHandlerADC3_IRQHandlerFSMC_IRQHandlerSDIO_I RQHandlerTIM5_I

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論