久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> HDSC/華大 >> 國產超低功耗華大單片啟動文件詳解及SystemInit函數分析

國產超低功耗華大單片啟動文件詳解及SystemInit函數分析

關鍵字:小華單片機 作者: 來源: 發布時間:2020-06-08  瀏覽:138

啟動代碼文件名一般可命名為如startup_hc32xxxx.s。啟動代碼作用一般是:

1) 堆和棧的初始化

包括堆棧的大小,MSP(main stack pointer)值等。MSP的初始值在復位階段取自存儲區的第一個字(即0地址處的值)。

棧Stack: 由編譯器自動分配和釋放,存放函數的參數值、局部變量的值等,其操作方式類似于數據結構中的棧。向低地址擴展。

堆Heap: 一般由程序員分配和釋放,若程序員不釋放,程序結束時可能由操作系統回收。分配方式類似于數據結構中的鏈表。向高地址擴展。

2)向量表定義
定義了各MSP初值,以及各個中斷服務程序(ISR)的入口地址。

3)中斷服務程序
CPU根據中斷號從向量表中獲取入口地址后,跳轉至對應的ISR

4)設置系統時鐘頻率
可在復位中斷服務程序Reset_handler中調用系統時鐘頻率初始化程序

5) 中斷寄存器的初始化

6)進入C應用程序
在復位中斷服務程序即Reset_handler中實現進入C程序。如:

LDR R0 , =_main ;使用“=”表示LDR目前是偽指令。這里是把_main的地址給R0。

BX R0 ; BX是ARM指令集和THUMB指令集之間程序的跳轉。

以下以華大單片機HC32L136K8TA的啟動文件為例,對1) — 6)進行詳細分析。

;先在RAM中分配系統使用的棧,RAM的起始地址為0x2000_0000

;然后在RAM中分配變量使用的堆

;然后在CODE區(flash)分配中斷向量表,flash的起始地址為0x0000_0000,該中斷向量表就從這個起始地址開始分配

;分配完成后,再定義和實現相應的中斷函數,

;所有的中斷函數全部帶有[weak]特性,即弱定義,如果編譯器發現在別處文件中定義了同名函數,在鏈接時用別處的地址進行鏈接。

;中斷函數僅僅實現了Reset_Handler,其他要么是死循環,要么僅僅定義了函數名稱

;HC32被設置為從內部FLASH啟動時(這也是最常見的一種情況),當HC32遇到復位信號后,

;從0x0000_0000處取出棧頂地址存放于MSP寄存器,從0x0000_0004處取出復位中斷服務入口地址放入PC寄存器,

;繼而執行復位中斷服務程序Reset_Handler,

;Reset_Handler僅僅執行了兩個函數調用,一個是SystemInit,另一個__main,

;SystemInit定義在system_hc32xxxx.c中,主要初始化了HC的時鐘系統:RCH,RCL,XTH,XTL,PLL,SystemClk,HCLK,PCLK等等.

;__main函數由編譯器生成,負責初始化棧、堆等,并在最后跳轉到用戶自定義的main()函數,來到C的世界。

HC32L136K8TA芯片的中斷向量表如下圖所示:

; Stack Configuration; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>Stack_Size EQU 0x00000200 ;定義堆棧大小AREA STACK, NOINIT, READWRITE, ALIGN=3 ;定義一個數據段 按8字節對齊 ;AREA 偽指令用于定義一個代碼段或數據段 ;NOINIT:指定此數據段僅僅保留了內存單元, ;而沒有將各初始值寫入內存單元, ;或者將各個內存單元值初始化為0Stack_Mem SPACE Stack_Size ;保留Stack_Size大小的堆棧空間分配連續 ;Stack_Size字節的存儲單元并初始化為 0 __initial_sp ;標號,代表堆棧頂部地址,后面有用; Heap Configuration; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>Heap_Size EQU 0x00000000 ;定義堆空間大小AREA HEAP, NOINIT, READWRITE, ALIGN=3 ;定義一個數據段,8字節對齊__heap_base ;標號,代表堆末底部地址,后面有用Heap_Mem SPACE Heap_Size ;保留Heap_Size的堆空間 __heap_limit ;標號,代表堆界限地址,后面有用 ;PRESERVE8 指令指定當前文件保持堆棧八字節對齊。 ;它設置 PRES8 編譯屬性以通知鏈接器。 ;鏈接器檢查要求堆棧八字節對齊的任何代碼是否僅由 ;保持堆棧八字節對齊的代碼直接或間接地調用。PRESERVE8 ;指示編譯器8字節對齊THUMB ;指示編譯器以后的指令為THUMB指令; Vector Table Mapped to Address 0 at Reset ;中斷向量表定義AREA RESET, DATA, READONLY;定義只讀數據段,其實放在CODE區,位于0地址EXPORT __Vectors ;EXPORT:在程序中聲明一個全局的標號__Vectors, ;該標號可在其他的文件中引用EXPORT __Vectors_EndEXPORT __Vectors_Size__Vectors DCD __initial_sp ;Top of Stack;給__initial_sp分配4字節32位的地址0x0DCD Reset_Handler ;Reset ; 給標號Reset Handler分配地址為0x00000004 DCD NMI_Handler ; NMI; 給標號NMI Handler分配地址0x00000008DCD HardFault_Handler ; Hard FaultDCD 0 ; Reserved ; 這種形式就是保留地址,不給任何標號分配DCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD SVC_Handler ; SVCallDCD 0 ; ReservedDCD 0 ; ReservedDCD PendSV_Handler ; PendSVDCD SysTick_Handler ; SysTickDCD PORTA_IRQHandlerDCD PORTB_IRQHandlerDCD PORTC_IRQHandlerDCD PORTD_IRQHandlerDCD DMAC_IRQHandlerDCD TIM3_IRQHandlerDCD UART0_IRQHandlerDCD UART1_IRQHandlerDCD LPUART0_IRQHandlerDCD LPUART1_IRQHandlerDCD SPI0_IRQHandlerDCD SPI1_IRQHandlerDCD I2C0_IRQHandlerDCD I2C1_IRQHandlerDCD TIM0_IRQHandlerDCD TIM1_IRQHandlerDCD TIM2_IRQHandlerDCD LPTIM_IRQHandlerDCD TIM4_IRQHandlerDCD TIM5_IRQHandlerDCD TIM6_IRQHandlerDCD PCA_IRQHandlerDCD WDT_IRQHandlerDCD RTC_IRQHandlerDCD ADC_IRQHandlerDCD PCNT_IRQHandlerDCD VC0_IRQHandlerDCD VC1_IRQHandlerDCD LVD_IRQHandlerDCD LCD_IRQHandlerDCD EF_RAM_IRQHandlerDCD CLKTRIM_IRQHandler __Vectors_End__Vectors_Size EQU __Vectors_End - __VectorsAREA |.text|, CODE, READONLY ;代碼段定義; Reset Handler ;利用PROC、ENDP這一對偽指令把程序段分為若干 ;個過程,使程序的結構加清晰Reset_Handler PROC ;過程的開始EXPORT Reset_Handler [WEAK] ;[WEAK] 弱定義,意思是如果在別處也定義該標號 ;(函數),在鏈接時用別處的地址。 如果沒有其它地方 ;定義,編譯器也不報錯,以此處地址進行鏈接。 ;EXPORT提示編譯器該標號可以為外部文件引用。IMPORT SystemInit ;代碼中的系統初始化程序IMPORT __main ;通知編譯器要使用的標號在其他文件;reset NVIC if in rom debug LDR R0, =0x20000000LDR R2, =0x0MOVS R1, #0 ; for warning,ADD R1, PC,#0 ; for A1609W,CMP R1, R0BLS RAMCODE; ram code base address.ADD R2, R0,R2RAMCODE; reset Vector table address.LDR R0, =0xE000ED08STR R2, [R0]LDR R0, =SystemInit BLX R0 ;BX是ARM指令集和THUMB指令集之間程序的跳轉 LDR R0, =__main ;使用“=”表示LDR目前是偽指令不是標準指令。 ;這里是把__main的地址給RO。BX R0 ;BX是ARM指令集和THUMB指令集之間程序的跳轉ENDP ;過程的結束; Dummy Exception Handlers (infinite loops which can be modified)NMI_Handler PROCEXPORT NMI_Handler [WEAK]B .ENDPHardFault_Handler\PROCEXPORT HardFault_Handler [WEAK]B . ;原地跳轉(即無限循環),等同于while(1);ENDPSVC_Handler PROCEXPORT SVC_Handler [WEAK]B .ENDPPendSV_Handler PROCEXPORT PendSV_Handler [WEAK]B .ENDPSysTick_Handler PROCEXPORT SysTick_Handler [WEAK]B .ENDPDefault_Handler PROCEXPORT PORTA_IRQHandler [WEAK]EXPORT PORTB_IRQHandler [WEAK]EXPORT PORTC_IRQHandler [WEAK]EXPORT PORTD_IRQHandler [WEAK]EXPORT DMAC_IRQHandler [WEAK]EXPORT TIM3_IRQHandler [WEAK]EXPORT UART0_IRQHandler [WEAK]EXPORT UART1_IRQHandler [WEAK]EXPORT LPUART0_IRQHandler [WEAK]EXPORT LPUART1_IRQHandler [WEAK]EXPORT SPI0_IRQHandler [WEAK]EXPORT SPI1_IRQHandler [WEAK]EXPORT I2C0_IRQHandler [WEAK]EXPORT I2C1_IRQHandler [WEAK]EXPORT TIM0_IRQHandler [WEAK]EXPORT TIM1_IRQHandler [WEAK]EXPORT TIM2_IRQHandler [WEAK]EXPORT LPTIM_IRQHandler [WEAK]EXPORT TIM4_IRQHandler [WEAK]EXPORT TIM5_IRQHandler [WEAK]EXPORT TIM6_IRQHandler [WEAK]EXPORT PCA_IRQHandler [WEAK]EXPORT WDT_IRQHandler [WEAK]EXPORT RTC_IRQHandler [WEAK]EXPORT ADC_IRQHandler [WEAK]EXPORT PCNT_IRQHandler [WEAK]EXPORT VC0_IRQHandler [WEAK]EXPORT VC1_IRQHandler [WEAK]EXPORT LVD_IRQHandler [WEAK]EXPORT LCD_IRQHandler [WEAK]EXPORT EF_RAM_IRQHandler [WEAK]EXPORT CLKTRIM_IRQHandler [WEAK]PORTA_IRQHandlerPORTB_IRQHandlerPORTC_IRQHandlerPORTD_IRQHandlerDMAC_IRQHandlerTIM3_IRQHandlerUART0_IRQHandlerUART1_IRQHandlerLPUART0_IRQHandlerLPUART1_IRQHandlerSPI0_IRQHandlerSPI1_IRQHandlerI2C0_IRQHandlerI2C1_IRQHandlerTIM0_IRQHandlerTIM1_IRQHandlerTIM2_IRQHandlerLPTIM_IRQHandlerTIM4_IRQHandlerTIM5_IRQHandlerTIM6_IRQHandlerPCA_IRQHandlerWDT_IRQHandlerRTC_IRQHandlerADC_IRQHandlerPCNT_IRQHandlerVC0_IRQHandlerVC1_IRQHandlerLVD_IRQHandlerLCD_IRQHandlerEF_RAM_IRQHandlerCLKTRIM_IRQHandler B .ENDPALIGN ;填充字節使地址對齊; User Initial Stack & Heap ;堆和棧的初始化IF :DEF:__MICROLIB ;“DEF”的用法:DEF:X就是說X定義了則為真,否則為 ;如果定義了MICORLIB,EXPORT __initial_sp ;則將棧頂地址,EXPORT __heap_base ;堆起始地址賦予全局屬性,EXPORT __heap_limit ;堆末端界限地址賦予全局屬性,使外部程序可調用ELSE ;如果沒定義__MICROLIB,則使用默認的C運行時庫IMPORT __use_two_region_memory ;通知編譯器要使用的標號在其他文件 ;__use_two_region_memory EXPORT __user_initial_stackheap ;聲明全局標號__user_initial_stackheap, ;這樣外程序也可調用此標號,則進行堆棧和堆的賦 ;值,在__main函數執行過程中調用, 如果使用默認的 ;C庫,程序啟動過程中就不會執行該標號下的代碼__user_initial_stackheap ;標號,表示用戶堆棧初始化程序入口 ;進行堆棧和堆的賦值,在_main函數執行過程中調用。LDR R0, = Heap_Mem ;保存堆始地址LDR R1, =(Stack_Mem + Stack_Size) ;保存棧的大小LDR R2, = (Heap_Mem + Heap_Size) ;保存堆的大小LDR R3, = Stack_Mem ;保存棧頂指針BX LRALIGN ;填充字節使地址對齊ENDIFEND

編輯:admin  最后修改時間:2020-09-07

聯系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市南山區桃源街道平山社區平山一路2號南山云谷創業園二期11棟410-411

Copyright © 2014-2026 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网
欧美黄色免费网址| 97超碰在线人人| 日韩欧美xxxx| 久久久久狠狠高潮亚洲精品| 很污的网站在线观看| 国产精品国产亚洲精品看不卡| 天堂av在线中文| 亚洲精品蜜桃久久久久久| 人人妻人人澡人人爽欧美一区| 亚洲一区 在线播放| 日韩人妻无码精品久久久不卡| 热久久最新网址| 99在线精品免费视频| 亚洲欧洲日产国码无码久久99| 国产深夜男女无套内射| 亚洲色欲综合一区二区三区| 欧美日韩亚洲自拍| 色撸撸在线观看| 欧美成人高潮一二区在线看| 国产成人精品视频ⅴa片软件竹菊| 日韩av片网站| 国产精品久久久影院| 97超碰青青草| 亚洲精品mv在线观看| 国产 欧美 日韩 一区| 精品视频无码一区二区三区| theporn国产精品| 国产婷婷一区二区三区| 日本人视频jizz页码69| 免费网站在线观看视频| www.色偷偷.com| 欧美日韩不卡在线视频| 国产探花在线看| 黄色免费观看视频网站| 午夜视频在线观| 免费无码不卡视频在线观看| 午夜不卡福利视频| 久久美女福利视频| 永久免费在线看片视频| 国产精品入口免费软件| 免费人成在线观看视频播放| 天天影视综合色| av免费观看大全| 国产91视频一区| 福利片一区二区三区| 成年人黄色片视频| 欧洲精品在线播放| 中文字幕第66页| 久久久精品麻豆| 国产熟人av一二三区| 国产一区二区视频播放| 日韩国产成人无码av毛片| 国产高清精品软男同| 中文字幕第100页| 亚洲不卡视频在线| 久久久久国产精品熟女影院 | 国产一二三四在线视频| 免费观看国产精品视频| 中文精品无码中文字幕无码专区| 日韩精品aaa| 一起操在线视频| 99re6在线观看| 污污的视频免费| 在线视频一二区| 久久久久亚洲av无码专区喷水| 91亚洲免费视频| 久久精品亚洲天堂| 天天在线免费视频| 日本久久久网站| 99热自拍偷拍| 天天操天天爽天天射| 超碰在线人人爱| www.日本久久| 久久av综合网| 欧美牲交a欧美牲交aⅴ免费下载| 久久久久久久久久久久久国产精品 | 日本a√在线观看| 国产成年人视频网站| 国产黑丝在线视频| 青青青在线观看视频| 一区二区传媒有限公司| 国产精品69页| 九九九久久久久久久| 国产一级不卡视频| 国产情侣av自拍| 九九九久久久久久久| 欧美精品自拍视频| 欧美日韩中文不卡| 欧美亚洲黄色片| 色91精品久久久久久久久| 成人手机在线播放| 激情婷婷综合网| 99中文字幕在线观看| 日日摸天天爽天天爽视频| 午夜av中文字幕| 男人用嘴添女人下身免费视频| 在线视频日韩一区| 女人被男人躁得好爽免费视频| 欧美视频第三页| wwwwww欧美| 黄色一级片免费播放| 男人揉女人奶房视频60分| 一级日本黄色片| 欧美三级午夜理伦三级富婆| 国内自拍中文字幕| 手机av在线网| 中文字幕欧美人妻精品一区| 欧洲金发美女大战黑人| 校园春色 亚洲色图| 好吊妞无缓冲视频观看| 激情图片qvod| 中文字幕66页| 欧美女同在线观看| 黄色片久久久久| 亚洲熟妇av日韩熟妇在线| 国产911在线观看| 亚洲天堂伊人网| 日本xxxx黄色| 99视频免费播放| 日本www高清视频| 黄色免费视频大全| 国产极品在线视频| 99热亚洲精品| 亚洲美免无码中文字幕在线| 成人短视频在线观看免费| 性鲍视频在线观看| 亚洲av无日韩毛片久久| 亚洲国产高清av| 三级视频中文字幕| 亚洲激情在线看| 超碰91在线播放| 国产女人18毛片| 亚洲色成人www永久在线观看| 成人高清dvd| 真人抽搐一进一出视频| www.中文字幕在线| 成人在线观看a| 色婷婷一区二区三区av免费看| 最近中文字幕一区二区| 在线观看免费视频高清游戏推荐| 国产成人在线综合| 99re6这里有精品热视频| 狠狠精品干练久久久无码中文字幕| 喜爱夜蒲2在线| 精品99在线视频| 色91精品久久久久久久久| 成年人三级视频| 男人操女人免费软件| 天天综合网日韩| 亚洲精品少妇一区二区| 天堂…中文在线最新版在线| 欧在线一二三四区| 国产av第一区| 亚洲美免无码中文字幕在线| 久久久久久久久久久久91| 亚洲第一精品区| www.玖玖玖| 色撸撸在线观看| 欧美视频第一区| www.成年人| 成人免费观看毛片| 男女爱爱视频网站| www.超碰com| 日韩 欧美 视频| 第一区免费在线观看| 九九爱精品视频| 三年中国中文在线观看免费播放| 男人揉女人奶房视频60分| 在线观看av免费观看| 久久国产乱子伦免费精品| 色爽爽爽爽爽爽爽爽| 亚洲不卡视频在线| 欧美精品一区免费| 日韩精品久久一区二区| 亚洲天堂网一区| 999香蕉视频| 777精品久无码人妻蜜桃| 一本二本三本亚洲码| 欧美成人三级在线播放| 久久国产色av免费观看| 黄色av网址在线播放| 成人在线免费观看网址| 午夜一级免费视频| 成人中文字幕av| 国产精品乱码久久久久| 日韩一级免费在线观看| 精品一区二区中文字幕| 久久久久久人妻一区二区三区| 国产亚洲精品久久久久久久| 免费看啪啪网站| 国产日韩视频在线播放| 国产一级片中文字幕| 欧美爱爱视频网站| 中文字幕第66页| 国产高清免费在线| 在线观看免费黄色片| 日韩最新中文字幕| 日韩成人手机在线| 日韩a∨精品日韩在线观看| 毛片在线视频播放|