您的位置 首页 芯闻

STM32 keil mdk发动代码发剖析

学习STM32,看了一堆乱七八糟的文档,准备写程序了,先分析了下STM32的启动代码,看着这堆鬼鬼的汇编代码,挺吓人的,看看帮助,查查网路,…

学习STM32,看了一堆杂乱无章的文档,预备写程序了,先剖析了下STM32的发动代码,看着这堆鬼鬼的汇编代码,挺吓人的,看看协助,查查网路,仍是不那么难明。

  1. ;//StackConfiguration
  2. ;//StackSize(inBytes)<0x0-0xFFFFFFFF:8>
  3. ;//
  4. Stack_SizeEQU0x00000200;//界说仓库巨细
  5. AREASTACK,NOINIT,READWRITE,ALIGN=3;//界说一个数据段按8字节对齐
  6. Stack_MemSPACEStack_Size;//保存Stack_Size巨细的仓库空间
  7. __initial_sp;//标号,代表仓库顶部地址,后边有用
  8. ;//HeapConfiguration
  9. ;//HeapSize(inBytes)<0x0-0xFFFFFFFF:8>
  10. ;//
  11. Heap_SizeEQU0x00000020;//界说堆空间巨细
  12. AREAHEAP,NOINIT,READWRITE,ALIGN=3;//界说一个数据段,8字节对齐
  13. __heap_base
  14. Heap_MemSPACEHeap_Size;//保存Heap_Size的堆空间
  15. __heap_limit;//标号,代表堆结尾地址,后边有用
  16. PRESERVE8;//指示编译器8字节对齐
  17. THUMB;//指示编译器为THUMB指令
  18. ;VectorTableMappedtoAddress0atReset
  19. AREARESET,DATA,READONLY;//界说只读数据段,其实放在CODE区,坐落0地址
  20. EXTERNNMIException
  21. EXTERNHardFaultException
  22. EXTERNMemManageException
  23. EXTERNBusFaultException
  24. EXTERNUsageFaultException
  25. EXTERNSVCHandler
  26. EXTERNDebugMonitor
  27. EXTERNPendSVC
  28. EXTERNSysTickHandler;//声明这些符号在外部界说,同C
  29. ;//在××it.c中完结这些函数,中止就能主动调用了
  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//一大堆的反常处理函数地址
  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的完结
  137. EXPORTReset_Handler[WEAK];//在外部没有界说该符号时导出该符号,见HELP中[WEAK]
  138. IMPORT__main;//导入符号,__main为运行时库供给的函数;完结仓库,堆的初始话
  139. LDRR0,=__main;//等作业,会调用下面界说的__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函数履行过程中调用。
  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,完了

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/275400.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部