STM32 keil mdk啟動代碼發(fā)分析
- ;//
StackConfiguration - ;//
StackSize(inBytes)<0x0-0xFFFFFFFF:8> - ;//
- Stack_SizeEQU0x00000200;//定義堆棧大小
- AREASTACK,NOINIT,READWRITE,ALIGN=3;//定義一個數據段按8字節(jié)對齊
- Stack_MemSPACEStack_Size;//保留Stack_Size大小的堆??臻g
- __initial_sp;//標號,代表堆棧頂部地址,后面有用
- ;//
HeapConfiguration - ;//
HeapSize(inBytes)<0x0-0xFFFFFFFF:8> - ;//
- Heap_SizeEQU0x00000020;//定義堆空間大小
- AREAHEAP,NOINIT,READWRITE,ALIGN=3;//定義一個數據段,8字節(jié)對齊
- __heap_base
- Heap_MemSPACEHeap_Size;//保留Heap_Size的堆空間
- __heap_limit;//標號,代表堆末尾地址,后面有用
- PRESERVE8;//指示編譯器8字節(jié)對齊
- THUMB;//指示編譯器為THUMB指令
- ;VectorTableMappedtoAddress0atReset
- AREARESET,DATA,READONLY;//定義只讀數據段,其實放在CODE區(qū),位于0地址
- EXTERNNMIException
- EXTERNHardFaultException
- EXTERNMemManageException
- EXTERNBusFaultException
- EXTERNUsageFaultException
- EXTERNSVCHandler
- EXTERNDebugMonitor
- EXTERNPendSVC
- EXTERNSysTickHandler;//聲明這些符號在外部定義,同C
- ;//在××it.c中實現這些函數,中斷就能自動調用了
- EXPORT__Vectors
- __VectorsDCD__initial_sp;TopofStack//Cotex-M要求此處為堆棧頂部地址
- DCDReset_Handler;ResetHandler
- DCDNMIException;NMIHandler
- DCDHardFaultException;HardFaultHandler
- DCDMemManageException;MPUFaultHandler
- DCDBusFaultException;BusFaultHandler
- DCDUsageFaultException;UsageFaultHandler
- DCD0;Reserved
- DCD0;Reserved
- DCD0;Reserved
- DCD0;Reserved
- DCDSVCHandler;SVCallHandler
- DCDDebugMonitor;DebugMonitorHandler
- DCD0;Reserved
- DCDPendSVC;PendSVHandler
- DCDSysTickHandler;SysTickHandler//一大堆的異常處理函數地址
- ;ExternalInterrupts
- EXTERNWWDG_IRQHandler
- EXTERNPVD_IRQHandler
- EXTERNTAMPER_IRQHandler
- EXTERNRTC_IRQHandler
- EXTERNFLASH_IRQHandler
- EXTERNRCC_IRQHandler
- EXTERNEXTI0_IRQHandler
- EXTERNEXTI1_IRQHandler
- EXTERNEXTI2_IRQHandler
- EXTERNEXTI3_IRQHandler
- EXTERNEXTI4_IRQHandler
- EXTERNDMAChannel1_IRQHandler
- EXTERNDMAChannel2_IRQHandler
- EXTERNDMAChannel3_IRQHandler
- EXTERNDMAChannel4_IRQHandler
- EXTERNDMAChannel5_IRQHandler
- EXTERNDMAChannel6_IRQHandler
- EXTERNDMAChannel7_IRQHandler
- EXTERNADC_IRQHandler
- EXTERNUSB_HP_CAN_TX_IRQHandler
- EXTERNUSB_LP_CAN_RX0_IRQHandler
- EXTERNCAN_RX1_IRQHandler
- EXTERNCAN_SCE_IRQHandler
- EXTERNEXTI9_5_IRQHandler
- EXTERNTIM1_BRK_IRQHandler
- EXTERNTIM1_UP_IRQHandler
- EXTERNTIM1_TRG_COM_IRQHandler
- EXTERNTIM1_CC_IRQHandler
- EXTERNTIM2_IRQHandler
- EXTERNTIM3_IRQHandler
- EXTERNTIM4_IRQHandler
- EXTERNI2C1_EV_IRQHandler
- EXTERNI2C1_ER_IRQHandler
- EXTERNI2C2_EV_IRQHandler
- EXTERNI2C2_ER_IRQHandler
- EXTERNSPI1_IRQHandler
- EXTERNSPI2_IRQHandler
- EXTERNUSART1_IRQHandler
- EXTERNUSART2_IRQHandler
- EXTERNUSART3_IRQHandler
- EXTERNEXTI15_10_IRQHandler
- EXTERNRTCAlarm_IRQHandler
- EXTERNUSBWakeUp_IRQHandler;//同上,
- DCDWWDG_IRQHandler;WindowWatchdog
- DCDPVD_IRQHandler;PVDthroughEXTILinedetect
- DCDTAMPER_IRQHandler;Tamper
- DCDRTC_IRQHandler;RTC
- DCDFLASH_IRQHandler;Flash
- DCDRCC_IRQHandler;RCC
- DCDEXTI0_IRQHandler;EXTILine0
- DCDEXTI1_IRQHandler;EXTILine1
- DCDEXTI2_IRQHandler;EXTILine2
- DCDEXTI3_IRQHandler;EXTILine3
- DCDEXTI4_IRQHandler;EXTILine4
- DCDDMAChannel1_IRQHandler;DMAChannel1
- DCDDMAChannel2_IRQHandler;DMAChannel2
- DCDDMAChannel3_IRQHandler;DMAChannel3
- DCDDMAChannel4_IRQHandler;DMAChannel4
- DCDDMAChannel5_IRQHandler;DMAChannel5
- DCDDMAChannel6_IRQHandler;DMAChannel6
- DCDDMAChannel7_IRQHandler;DMAChannel7
- DCDADC_IRQHandler;ADC
- DCDUSB_HP_CAN_TX_IRQHandler;USBHighPriorityorCANTX
- DCDUSB_LP_CAN_RX0_IRQHandler;USBLowPriorityorCANRX0
- DCDCAN_RX1_IRQHandler;CANRX1
- DCDCAN_SCE_IRQHandler;CANSCE
- DCDEXTI9_5_IRQHandler;EXTILine9..5
- DCDTIM1_BRK_IRQHandler;TIM1Break
- DCDTIM1_UP_IRQHandler;TIM1Update
- DCDTIM1_TRG_COM_IRQHandler;TIM1TriggerandCommutation
- DCDTIM1_CC_IRQHandler;TIM1CaptureCompare
- DCDTIM2_IRQHandler;TIM2
- DCDTIM3_IRQHandler;TIM3
- DCDTIM4_IRQHandler;TIM4
- DCDI2C1_EV_IRQHandler;I2C1Event
- DCDI2C1_ER_IRQHandler;I2C1Error
- DCDI2C2_EV_IRQHandler;I2C2Event
- DCDI2C2_ER_IRQHandler;I2C2Error
- DCDSPI1_IRQHandler;SPI1
- DCDSPI2_IRQHandler;SPI2
- DCDUSART1_IRQHandler;USART1
- DCDUSART2_IRQHandler;USART2
- DCDUSART3_IRQHandler;USART3
- DCDEXTI15_10_IRQHandler;EXTILine15..10
- DCDRTCAlarm_IRQHandler;RTCAlarmthroughEXTILine
- DCDUSBWakeUp_IRQHandler;USBWakeupfromsuspend;//同上
- AREA|.text|,CODE,READONLY;//定義代碼段
- ;ResetHandler
- Reset_HandlerPROC;//Rset_Handler的實現
- EXPORTReset_Handler[WEAK];//在外部沒有定義該符號時導出該符號,見HELP中[WEAK]
- IMPORT__main;//導入符號,__main為運行時庫提供的函數;完成堆棧,堆的初始話
- LDRR0,=__main;//等工作,會調用下面定義的__user_initial_stackheap;
- BXR0;//跳到__main,進入C的世界
- ENDP
- ALIGN
- ;UserInitialStack&Heap
- IF:DEF:__MICROLIB;//如果使用microlib,microlib描述見armlib.chm
- EXPORT__initial_sp
- EXPORT__heap_base
- EXPORT__heap_limit;//只導出幾個定義
- ELSE;//如果使用默認C運行時庫
- IMPORT__use_two_region_memory
- EXPORT__user_initial_stackheap
- __user_initial_stackheap;//則進行堆棧和堆的賦值,在__main函數執(zhí)行過程中調用。
- LDRR0,=Heap_Mem
- LDRR1,=(Stack_Mem+Stack_Size)
- LDRR2,=(Heap_Mem+Heap_Size)
- LDRR3,=Stack_Mem
- BXLR
- ALIGN
- ENDIF
- END;//OK,完了
評論