




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
;*文件名 :startup_stm32f10x_hd.s;*庫版本 :V3.5.0;*說明: 此文件為STM32F10X高密度設備的MDK工具鏈的啟動文件;*該模塊執(zhí)行以下操作:;*-設置初始堆棧指針(SP);*-設置初始程序計數(shù)器(PC)為復位向量,并在執(zhí)行main函數(shù)前初始化系統(tǒng)時鐘;*-設置向量表入口為異常事件的入口地址;*-復位之后處理器為線程模式,優(yōu)先級為特權(quán)級,堆棧設置為MSP主堆棧?*Stack_SizeEQU0x00000200;定義堆棧的大小;AREA命令指示匯編器匯編一個新的代碼段或數(shù)據(jù)段。;段是獨立的、指定的、不可見的代碼或數(shù)據(jù)塊,它們由鏈接器處理.;段是獨立的、命名的、不可分割的代碼或數(shù)據(jù)序列。一個代碼段是生成一個應用程序的最低要求;默認情況下,ELF段在四字節(jié)邊界上對齊。expression可以擁有0到31的任何整數(shù)。;段在2expression字節(jié)邊界上對齊AREASTACK,NOINIT,READWRITE,ALIGN=3 ;堆棧段,未初始化,允許讀寫,8字節(jié)邊界對齊;說明:Cortex-M3的指令地址要求是字邊界對齊(4字節(jié));但是代碼段是8字節(jié)邊界對齊的Stack_Mem SPACEStack_Size;分配堆??臻g,把首地址賦給Stack_Mem—initial_sp;初始化堆棧指針,指向堆棧頂.;此處有個一個問題討論,關(guān)于棧頂在RAM中所處位置問題,很多初學者一直以為是編譯器特意放在HEAP段之后是有意為之,并且認為這樣可以利用heap未分配空間來防止未知的棧溢出問題;這種理解是錯誤的,鏈接器并不會為棧的位置做特殊的處理,而且這樣做也并不會利用heap段,在此文件的最后對堆棧的初始化代碼中可以看出他們是兩個互相獨立的數(shù)據(jù)區(qū)。此處出現(xiàn)的現(xiàn);象是因為MDK按數(shù)據(jù)段的字母順序鏈接數(shù)據(jù)段的地址的,所以此處造成了堆的地址在棧的前面的假象,不要竊以為是有某種特殊的約定。;<h>HeapConfiguration; <o>HeapSize(inBytes)<0x0-0xFFFFFFFF:8>Heap_Size EQU0x00000200;定義堆的大小AREAHEAP,NOINIT,READWRITE,ALIGN=3;堆段,未初始化,允許讀寫,堆數(shù)據(jù)段8字節(jié)邊界對齊__heap_baseHeap_Mem SPACEHeap_Size;分配堆空間__heap_limit ;與__heap_base配合限制堆的大小PRESERVE8;命令指定當前文件保持棧的八字節(jié)對齊DCDNMI_HandlerDCDDCDNMI_HandlerDCDHardFault_HandlerDCDMemManage_Handler斷DCDBusFault_Handler般發(fā)生在數(shù)據(jù)訪問異常,比如fsmc訪問不當DCDUsageFault_Handler開始,F(xiàn)LASH的0地址,復位后首先裝載棧頂指針DCD Reset_Handler后,第一個執(zhí)行的,并且不返回。一般是預取值,或者位置指令,數(shù)據(jù)處理等錯誤DCD0DCD0DCD0DCD0DCDSVC_Handler為了調(diào)用操作系統(tǒng)內(nèi)核服務DCDDebugMon_Handler常DCD0;DCDPendSV_Handler;EXPORT命令聲明一個符號,可由鏈接器用于解釋各個目標和庫文件中的符號引用,相當于聲明了一個全局變量。GLOBAL于EXPORT相同。;以下為向量表,在復位時被映射到FLASH的0地址AREARESET,DATA,READONLY;復位段,只包含數(shù)據(jù),只讀EXPORT_Vectors ;標號輸出,中斷向量表開始EXPORT__Vectors_End ;中斷向量表結(jié)束EXPORT__Vectors_Size ;中斷向量表大小;DCD命令分配一個或多個字的存儲器,在四個字節(jié)的邊界上對齊,并定義存儲器的運行時初值?!猇ectors DCD __initial_sp ;TopofStack棧頂指針,被放在向量表的;ResetHandler復位異常,裝載完棧頂;NMIHandler 不可屏蔽中斷;HardFaultHandler硬件錯誤中斷;MPUFaultHandler內(nèi)存管理錯誤中;BusFaultHandler總線錯誤中斷,一;UsageFaultHandler用法錯誤中斷,;Reserved;Reserved;Reserved;Reserved;SVCallHandler系統(tǒng)調(diào)用異常,主要是;DebugMonitorHandler調(diào)試監(jiān)視異;Reserved;PendSVHandler 掛起異常,此處可以看見用作了uCOS-II的上下文切換異常,這是被推薦使用的,因為Cortex-M3會在異常發(fā)生時自動保存R0-R3,;R12,R13(堆棧指針SP),R14(鏈接地址,也叫返回地址LR,在異常返回時使用),R15(程序計數(shù)器PC,為當前應用程序+4)和中斷完成時自動回復,;我們只需保存R4-R11,大大減少了中斷響應和上下文切換的時間。;說明:此處涉及到一個中斷保存寄存器問題:因為在所有的運行模式下,未分組寄存器都指向同一個物理寄存器,他們未被系統(tǒng)用作特殊的用途,因此,在中斷或者異常處理進行模式轉(zhuǎn)換; 時,由于不同模式(此處為"線程"和"特權(quán)")均使用相同的物理寄存器,可能會造成寄存器中數(shù)據(jù)的破壞。這也是常說的"關(guān)鍵代碼段"和"l臨界區(qū)"保護的原因。;DCDSysTick_Handler ;SysTickHandler滴答定時器,為操作系統(tǒng)內(nèi)核時鐘DCDDCDDCDOS_CPU_PendSVHandlerOS_CPU_SysTickHandler;ExternalInterrupts
以下為外部中斷向量表DMA1_Channel1_IRQHandlerDMA1_Channel2_IRQHandlerDMA1_Channel1_IRQHandlerDMA1_Channel2_IRQHandlerDMA1_Channel3_IRQHandlerDMA1_Channel4_IRQHandlerDMA1_Channel5_IRQHandlerDMA1_Channel6_IRQHandlerDMA1_Channel7_IRQHandlerADC1_2_IRQHandler ;ADC1&ADC2USB_HP_CAN1_TX_IRQHandler;USBHighPriorityorCAN1TXDCDWWDG_IRQHandlerDCD PVD_IRQHandlerDCD TAMPER_IRQHandlerDCD RTC_IRQHandlerDCD FLASH_IRQHandlerDCD RCC_IRQHandlerDCD EXTIO_IRQHandlerDCD EXTI1_IRQHandlerDCD EXTI2_IRQHandlerDCD EXTI3_IRQHandlerDCD EXTI4_IRQHandlerDCDDCDDCDDCDDCDDCDDCDDCDDCD
;WindowWatchdog;PVDthroughEXTILinedetect;Tamper;RTC;Flash;RCC;EXTILine0;EXTILine1;EXTILine2;EXTILine3;EXTILine4;DMA1Channel1;DMA1Channel2;DMA1Channel3;DMA1Channel4;DMA1Channel5;DMA1Channel6;DMA1Channel7DCDUSB_LP_CAN1_RX0_IRQHandler;USBLowPriorityorCAN1RX0DCDCAN1_RX1_IRQHandler;CAN1RX1DCDCAN1_SCE_IRQHandler;CAN1SCEDCDEXTI9_5_IRQHandler;EXTILine9..5DCDTIM1_BRK_IRQHandler;TIM1BreakDCDTIM1_UP_IRQHandler;TIM1UpdateDCDTIM1_TRG_COM_IRQHandler;TIM1TriggerandCommutationDCDTIM1_CC_IRQHandler;TIM1CaptureCompareDCDTIM2_IRQHandler;TIM2DCDTIM3_IRQHandler;TIM3DCDTIM4_IRQHandler;TIM4DCDI2C1_EV_IRQHandler;I2C1EventDCDI2C1_ER_IRQHandler;I2C1ErrorDCDI2C2_EV_IRQHandler;I2C2EventDCDI2C2_ER_IRQHandler;I2C2ErrorDCDSPI1_IRQHandler;SPI1DCDSPI2_IRQHandler;SPI2DCDUSART1_IRQHandler;USART1DCDUSART2_IRQHandler;USART2DCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDTIM8_UP_IRQHandlerTIM8_TRG_C0M_IRQHandlerTIM8_CC_IRQHandlerADC3_IRQHandlerFSMC_IRQHandlerSDIO_IRQHandlerTIM5_IRQHandlerSPI3_IRQHandlerUART4_IRQHandlerUART5_IRQHandlerTIM6_IRQHandlerTIM7_IRQHandlerDMA2_Channel1_IRQHandlerDMA2_Channel2_IRQHandlerDMA2_Channel3_IRQHandler;USART3;EXTILine15..10;RTCAlarmthroughEXTILine;USBWakeupfromsuspend;TIM8Break;TIM8Update;TIM8TriggerandCommutation;TIM8CaptureCompare;ADC3;FSMC;SDIO;TIM5;SPI3;UART4;UART5;TIM6;TIM7;DMA2Channel】;DMA2Channel2;DMA2Channel3DMA2_Channel4_5_IRQHandler;DMA2Channel4&Channel5Vectors_End ;向量表結(jié)束標志__Vectors_SizeEQU__Vectors_End-__Vectors;計算向量表地址空間大小;|.text|用于表示由C編譯程序產(chǎn)生的代碼段,或用于以某種方式與C庫關(guān)聯(lián)的代碼段。AREA|.text|,CODE,READONLY淀義C編譯器源代碼的代碼段,只讀;ResethandlerReset_HandlerPROCEXPORTReset_Handler ;此處表示弱定義,優(yōu)先執(zhí)行其他文件的定義IMPORT__mainIMPORTSystemInitLDRRO,=SystemInit;裝載寄存器指令BLX RO ;帶鏈接的跳轉(zhuǎn),切換指令集LDR RO, =__mainBX RO ;切換指令集,main函數(shù)不返回ENDP;DummyExceptionHandlers(infiniteloopswhichcanbemodified)NMI_HandlerPROCEXPORTNMI_HandlerB .ENDPHardFault_Handler\PROCEXPORTHardFault_HandlerB .ENDPMemManage_Handler\PROCEXPORTMemManage_HandlerB .ENDPBusFault_Handler\PROCEXPORTBusFault_HandlerB .ENDPUsageFault_Handler\PROCEXPORTUsageFault_HandlerB .ENDPSVC_HandlerPROCEXPORTSVC_HandlerB .ENDPDebugMon_Handler\PROCEXPORTDebugMon_HandlerTOC\o"1-5"\h\zB .ENDPOS_CPU_PendSVHandlerPROCEXPORTOS_CPU_PendSVHandlerB .ENDPOS_CPU_SysTickHandlerPROCEXPORTOS_CPU_SysTickHandlerB .ENDPDefault_HandlerPROC;輸出異常向量表標號,方便外部實現(xiàn)異常的具體功能,是弱定義的意思,如果外部定義了,優(yōu)先執(zhí)行外部定義,否則下面的函數(shù)定義EXPORTWWDG_IRQHandlerEXPORTPVD_IRQHandlerEXPORTTAMPER_IRQHandlerEXPORTRTC_IRQHandlerEXPORTFLASH_IRQHandlerEXPORTRCC_IRQHandlerEXPORTEXTIO_IRQHandlerEXPORTEXTI1_IRQHandlerEXPORTEXTI2_IRQHandlerEXPORTEXTI3_IRQHandlerEXPORTEXTI4_IRQHandlerEXPORTDMA1_Channel1_IRQHandlerEXPORTDMA1_Channel2_IRQHandlerEXPORTDMA1_Channel3_IRQHandlerEXPORTDMA1_Channel4_IRQHandlerEXPORTDMA1_Channel5_IRQHandlerEXPORTDMA1_Channel6_IRQHandlerEXPORTDMA1_Channel7_IRQHandlerEXPORTADC1_2_IRQHandlerEXPORTUSB_HP_CAN1_TX_IRQHandlerEXPORTUSB_LP_CAN1_RX0_IRQHandlerEXPORTCAN1_RX1_IRQHandlerEXPORTCAN1_SCE_IRQHandlerEXPORTEXTI9_5_IRQHandlerEXPORTTIM1_BRK_IRQHandlerEXPORTTIM1_UP_IRQHandlerEXPORTTIM1_TRG_COM_IRQHandlerEXPORTTIM1_CC_IRQHandlerEXPORTTIM2_IRQHandlerEXPORTTIM3_IRQHandlerEXPORTTIM4_IRQHandlerEXPORTI2C1_EV_IRQHandlerEXPORTI2C1_ER_IRQHandlerEXPORTI2C2_EV_IRQHandlerEXPORTI2C2_ER_IRQHandlerEXPORTSPI1_IRQHandlerEXPORTSPI2_IRQHandlerEXPORTUSART1_IRQHandlerEXPORTUSART2_IRQHandlerEXPORTUSART3_IRQHandlerEXPORTEXTI15_10_IRQHandlerEXPORTRTCAlarm_IRQHandlerEXPORTUSBWakeUp_IRQHandlerEXPORTTIM8_BRK_IRQHandlerEXPORTTIM8_UP_IRQHandlerEXPORTTIM8_TRG_COM_IRQHandlerEXPORTTIM8_CC_IRQHandlerEXPORTADC3_IRQHandlerEXPORTFSMC_IRQHandlerEXPORTSDIO_IRQHandlerEXPORTTIM5_IRQHandlerEXPORTSPI3_IRQHandlerEXPORTUART4_IRQHandlerEXPORTUART5_IRQHandlerEXPORTTIM6_IRQHandlerEXPORTTIM7_IRQHandlerEXPORTDMA2_Channel1_IRQHandlerEXPORTDMA2_Channel2_IRQHandlerEXPORTDMA2_Channel3_IRQHandlerEXPORTDMA2_Channel4_5_IRQHandler;如下只是定義一個空函數(shù)WWDG_IRQHandlerPVD_IRQHandlerTAMPER_IRQHandlerRTC_IRQHandlerFLASH_IRQHandlerRCC_IRQHandlerEXTIO_IRQHandlerEXTI1_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_IRQHandlerCAN1_RX1_IRQHandlerCAN1_SCE_IRQHandlerEXTI9_5_IRQHandlerTIM1_BRK_IRQHandlerTIM1_UP_IRQHandlerTIM1_TRG_C0M_IRQHandlerTIM1_CC_IRQHandlerTIM2_IRQHandlerI2C2_ER_IRQHandlerSPI1_IRQHandlerSPI2_IRQHandlerUSART1_IRQHandlerUSART2_IRQHandlerUSART3_IRQHandlerEXTI15_10_IRQHandlerRTCAlarm_IRQHandlerUSBWakeUp_IRQHandlerTIM8_BRK_IRQHandlerTIM8_UP_IRQHandlerTIM8_TRG_C0M_IRQHandlerTIM8_CC_IRQHandlerADC3_IRQHandlerFSMC_IRQHandler
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合伙養(yǎng)牛協(xié)議合同范本
- 試劑耗材購銷合同范本
- 設備維修合同范本正規(guī)合同
- 玉林買房合同范本
- 長期贊助合同范本
- 簡單勞務派遣合同
- 設備維修合同書范本
- 2025年浙江省杭州市中考作文備考策略與范文
- 高三下學期班主任職業(yè)生涯規(guī)劃指導計劃
- 2025年度高風險崗位安全培訓計劃
- 財務管理學(第10版)課件 第1章 總論
- DL-T5002-2021地區(qū)電網(wǎng)調(diào)度自動化設計規(guī)程
- 2024年南京旅游職業(yè)學院單招職業(yè)適應性測試題庫附答案
- MOOC 職業(yè)生涯開發(fā)與管理-南京郵電大學 中國大學慕課答案
- 春節(jié)的那些事作文6篇
- 《研學旅行課程設計》課件-領悟研學旅行的目標和意義
- XF-T 3004-2020 汽車加油加氣站消防安全管理
- 認識辦公室(辦公室管理課件)
- (正式版)JBT 14660-2024 額定電壓6kV到30kV地下掘進設備用橡皮絕緣軟電纜
- 本科院校-基礎醫(yī)學-醫(yī)學細胞生物學-第二章 細胞的概念與分子基礎
- iso37001-2016反賄賂管理手冊程序文件表單一整套
評論
0/150
提交評論