新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 keil mdk啟動代碼發分析

        STM32 keil mdk啟動代碼發分析

        作者: 時間:2016-11-10 來源:網絡 收藏
        學習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,完了



        關鍵詞: STM32keilmdk啟動代

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 赣州市| 城步| 云南省| 咸丰县| 宁阳县| 南阳市| 紫云| 莱州市| 江川县| 满洲里市| 红原县| 丹巴县| 永平县| 奎屯市| 馆陶县| 满洲里市| 静乐县| 靖州| 富蕴县| 松潘县| 临邑县| 项城市| 东港市| 航空| 尼勒克县| 洛隆县| 上虞市| 旌德县| 日喀则市| 金坛市| 略阳县| 定南县| 墨江| 尤溪县| 武鸣县| 西藏| 元氏县| 五莲县| 无棣县| 嘉祥县| 广水市|