新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32 keil mdk啟動代碼發(fā)分析

STM32 keil mdk啟動代碼發(fā)分析

作者: 時間:2016-11-10 來源:網(wǎng)絡 收藏
學習STM32,看了一堆亂七八糟的文檔,準備寫程序了,先分析了下STM32的啟動代碼,看著這堆鬼鬼的匯編代碼,挺嚇人的,看看幫助,查查網(wǎng)路,還是不那么難懂。
  1. ;//StackConfiguration
  2. ;//StackSize(inBytes)<0x0-0xFFFFFFFF:8>
  3. ;//
  4. Stack_SizeEQU0x00000200;//定義堆棧大小
  5. AREASTACK,NOINIT,READWRITE,ALIGN=3;//定義一個數(shù)據(jù)段按8字節(jié)對齊
  6. Stack_MemSPACEStack_Size;//保留Stack_Size大小的堆??臻g
  7. __initial_sp;//標號,代表堆棧頂部地址,后面有用
  8. ;//HeapConfiguration
  9. ;//HeapSize(inBytes)<0x0-0xFFFFFFFF:8>
  10. ;//
  11. Heap_SizeEQU0x00000020;//定義堆空間大小
  12. AREAHEAP,NOINIT,READWRITE,ALIGN=3;//定義一個數(shù)據(jù)段,8字節(jié)對齊
  13. __heap_base
  14. Heap_MemSPACEHeap_Size;//保留Heap_Size的堆空間
  15. __heap_limit;//標號,代表堆末尾地址,后面有用
  16. PRESERVE8;//指示編譯器8字節(jié)對齊
  17. THUMB;//指示編譯器為THUMB指令
  18. ;VectorTableMappedtoAddress0atReset
  19. AREARESET,DATA,READONLY;//定義只讀數(shù)據(jù)段,其實放在CODE區(qū),位于0地址
  20. EXTERNNMIException
  21. EXTERNHardFaultException
  22. EXTERNMemManageException
  23. EXTERNBusFaultException
  24. EXTERNUsageFaultException
  25. EXTERNSVCHandler
  26. EXTERNDebugMonitor
  27. EXTERNPendSVC
  28. EXTERNSysTickHandler;//聲明這些符號在外部定義,同C
  29. ;//在××it.c中實現(xiàn)這些函數(shù),中斷就能自動調(diào)用了
  30. EXPORT__Vectors
  31. __VectorsDCD__initial_sp;TopofStack//Cotex-M要求此處為堆棧頂部地址
  32. DCDReset_Handler;ResetHandler
  33. DCDNMIException;NMIHandler
  34. DCDHardFaultException;HardFaultHandler
  35. DCDMemManageException;MPUFaultHandler
  36. DCDBusFaultException;BusFaultHandler
  37. DCDUsageFaultException;UsageFaultHandler
  38. DCD0;Reserved
  39. DCD0;Reserved
  40. DCD0;Reserved
  41. DCD0;Reserved
  42. DCDSVCHandler;SVCallHandler
  43. DCDDebugMonitor;DebugMonitorHandler
  44. DCD0;Reserved
  45. DCDPendSVC;PendSVHandler
  46. DCDSysTickHandler;SysTickHandler//一大堆的異常處理函數(shù)地址
  47. ;ExternalInterrupts
  48. EXTERNWWDG_IRQHandler
  49. EXTERNPVD_IRQHandler
  50. EXTERNTAMPER_IRQHandler
  51. EXTERNRTC_IRQHandler
  52. EXTERNFLASH_IRQHandler
  53. EXTERNRCC_IRQHandler
  54. EXTERNEXTI0_IRQHandler
  55. EXTERNEXTI1_IRQHandler
  56. EXTERNEXTI2_IRQHandler
  57. EXTERNEXTI3_IRQHandler
  58. EXTERNEXTI4_IRQHandler
  59. EXTERNDMAChannel1_IRQHandler
  60. EXTERNDMAChannel2_IRQHandler
  61. EXTERNDMAChannel3_IRQHandler
  62. EXTERNDMAChannel4_IRQHandler
  63. EXTERNDMAChannel5_IRQHandler
  64. EXTERNDMAChannel6_IRQHandler
  65. EXTERNDMAChannel7_IRQHandler
  66. EXTERNADC_IRQHandler
  67. EXTERNUSB_HP_CAN_TX_IRQHandler
  68. EXTERNUSB_LP_CAN_RX0_IRQHandler
  69. EXTERNCAN_RX1_IRQHandler
  70. EXTERNCAN_SCE_IRQHandler
  71. EXTERNEXTI9_5_IRQHandler
  72. EXTERNTIM1_BRK_IRQHandler
  73. EXTERNTIM1_UP_IRQHandler
  74. EXTERNTIM1_TRG_COM_IRQHandler
  75. EXTERNTIM1_CC_IRQHandler
  76. EXTERNTIM2_IRQHandler
  77. EXTERNTIM3_IRQHandler
  78. EXTERNTIM4_IRQHandler
  79. EXTERNI2C1_EV_IRQHandler
  80. EXTERNI2C1_ER_IRQHandler
  81. EXTERNI2C2_EV_IRQHandler
  82. EXTERNI2C2_ER_IRQHandler
  83. EXTERNSPI1_IRQHandler
  84. EXTERNSPI2_IRQHandler
  85. EXTERNUSART1_IRQHandler
  86. EXTERNUSART2_IRQHandler
  87. EXTERNUSART3_IRQHandler
  88. EXTERNEXTI15_10_IRQHandler
  89. EXTERNRTCAlarm_IRQHandler
  90. EXTERNUSBWakeUp_IRQHandler;//同上,
  91. DCDWWDG_IRQHandler;WindowWatchdog
  92. DCDPVD_IRQHandler;PVDthroughEXTILinedetect
  93. DCDTAMPER_IRQHandler;Tamper
  94. DCDRTC_IRQHandler;RTC
  95. DCDFLASH_IRQHandler;Flash
  96. DCDRCC_IRQHandler;RCC
  97. DCDEXTI0_IRQHandler;EXTILine0
  98. DCDEXTI1_IRQHandler;EXTILine1
  99. DCDEXTI2_IRQHandler;EXTILine2
  100. DCDEXTI3_IRQHandler;EXTILine3
  101. DCDEXTI4_IRQHandler;EXTILine4
  102. DCDDMAChannel1_IRQHandler;DMAChannel1
  103. DCDDMAChannel2_IRQHandler;DMAChannel2
  104. DCDDMAChannel3_IRQHandler;DMAChannel3
  105. DCDDMAChannel4_IRQHandler;DMAChannel4
  106. DCDDMAChannel5_IRQHandler;DMAChannel5
  107. DCDDMAChannel6_IRQHandler;DMAChannel6
  108. DCDDMAChannel7_IRQHandler;DMAChannel7
  109. DCDADC_IRQHandler;ADC
  110. DCDUSB_HP_CAN_TX_IRQHandler;USBHighPriorityorCANTX
  111. DCDUSB_LP_CAN_RX0_IRQHandler;USBLowPriorityorCANRX0
  112. DCDCAN_RX1_IRQHandler;CANRX1
  113. DCDCAN_SCE_IRQHandler;CANSCE
  114. DCDEXTI9_5_IRQHandler;EXTILine9..5
  115. DCDTIM1_BRK_IRQHandler;TIM1Break
  116. DCDTIM1_UP_IRQHandler;TIM1Update
  117. DCDTIM1_TRG_COM_IRQHandler;TIM1TriggerandCommutation
  118. DCDTIM1_CC_IRQHandler;TIM1CaptureCompare
  119. DCDTIM2_IRQHandler;TIM2
  120. DCDTIM3_IRQHandler;TIM3
  121. DCDTIM4_IRQHandler;TIM4
  122. DCDI2C1_EV_IRQHandler;I2C1Event
  123. DCDI2C1_ER_IRQHandler;I2C1Error
  124. DCDI2C2_EV_IRQHandler;I2C2Event
  125. DCDI2C2_ER_IRQHandler;I2C2Error
  126. DCDSPI1_IRQHandler;SPI1
  127. DCDSPI2_IRQHandler;SPI2
  128. DCDUSART1_IRQHandler;USART1
  129. DCDUSART2_IRQHandler;USART2
  130. DCDUSART3_IRQHandler;USART3
  131. DCDEXTI15_10_IRQHandler;EXTILine15..10
  132. DCDRTCAlarm_IRQHandler;RTCAlarmthroughEXTILine
  133. DCDUSBWakeUp_IRQHandler;USBWakeupfromsuspend;//同上
  134. AREA|.text|,CODE,READONLY;//定義代碼段
  135. ;ResetHandler
  136. Reset_HandlerPROC;//Rset_Handler的實現(xiàn)
  137. EXPORTReset_Handler[WEAK];//在外部沒有定義該符號時導出該符號,見HELP中[WEAK]
  138. IMPORT__main;//導入符號,__main為運行時庫提供的函數(shù);完成堆棧,堆的初始話
  139. LDRR0,=__main;//等工作,會調(diào)用下面定義的__user_initial_stackheap;
  140. BXR0;//跳到__main,進入C的世界
  141. ENDP
  142. ALIGN
  143. ;UserInitialStack&Heap
  144. IF:DEF:__MICROLIB;//如果使用microlib,microlib描述見armlib.chm
  145. EXPORT__initial_sp
  146. EXPORT__heap_base
  147. EXPORT__heap_limit;//只導出幾個定義
  148. ELSE;//如果使用默認C運行時庫
  149. IMPORT__use_two_region_memory
  150. EXPORT__user_initial_stackheap
  151. __user_initial_stackheap;//則進行堆棧和堆的賦值,在__main函數(shù)執(zhí)行過程中調(diào)用。
  152. LDRR0,=Heap_Mem
  153. LDRR1,=(Stack_Mem+Stack_Size)
  154. LDRR2,=(Heap_Mem+Heap_Size)
  155. LDRR3,=Stack_Mem
  156. BXLR
  157. ALIGN
  158. ENDIF
  159. END;//OK,完了



關鍵詞: STM32keilmdk啟動代

評論


技術(shù)專區(qū)

關閉