五月色综合_娇妻卧室含辱迎接领导h_美女ppp_亚洲欧美aaa_天天在线综合_91午夜激情_裸体裸乳免费看_国产精品无码99re_日韩午夜视频在线观看_色爽 av_欧美大奶子视频_美女被爆操_国内久久_日本免费福利视频_苏语棠在线电视剧在线高清在线观看

【ARM】啟動文件詳解

在keil軟件中創建ARM工程的時候,總是在工程看到有startup_xxxx_hd.s(xxxx為芯片型號)這樣一個文件,該文件為ARM的啟動文件。在工程的main函數執行之前的工作就是執行啟動文件。接下來就具體剖析一下啟動文件的內容與工作。


一、堆棧空間的定義

首先,一開始啟動文件的任務是對于棧空間進行定義:

Stack_Size EQU 0x400:定義棧的空間大小1024字節。

AREA STACK, NOINIT, READWRITE, ALIGN=3:STACK為段名,可以隨意命名;NOINIT表示不初始化;READWRITE表示可讀可寫;ALIGN=3表示按照棧空間按照2^3字節對齊

Stack_Mem SPACE Stack _Size:開辟棧大小1024B并用0填充

__initial_sp:標記棧頂的地址

然后是對于堆空間的定義


Heap_Size EQU 0x200:定義堆大小為512字節

AREA HEAP, NOINIT, READWRITE, ALIGN=3:HEAP為段名,可以隨意命名;NOINIT表示不初始化;READWRITE表示可讀可寫;ALIGN=3表示按照堆空間按照2^3字節對齊

__heap_base:堆空間基址(即起始地址)

Heap_Mem SPACE Heap_Size:開辟堆空間512字節,并清0

__heap_limit:堆空間結束地址

PRESERVE8:設置這個文件告訴編譯器鏈接時堆棧是8字節對齊

THUMB:開始使用thumb指令模式


二、中斷向量表的定義

在堆棧定義好后,接下來的工作就是對于中斷向量表進行定義。

1、中斷向量定義的入口,聲明一些變量。

AREA RESET, DATA, READONLY:表示復位后,中斷向量表映射到地址0

EXPORT __Vectors:聲明全局符號,表示中斷向量表入口地址

EXPORT __Vectors_End:聲明全局符號,中斷向量表結束地址

EXPORT __Vectors_Size:聲明全局符號,中斷向量表大小

__Vectors DCD __initial_sp ; Top of Stack:表示棧頂地址


2、定義中斷的函數指針了。

Reset_Handler定義的是復位中斷的函數指針,NMI_Handler到SysTick_Handler就是內核中斷的函數指針。



然后從WWDG_IRQHandler到WAKEUP_PIN_IRQHandler就是外設中斷的函數指針。

最后,__Vectors_End表示中斷向量表結束。



3、配置中斷向量表。


_Vectors_Size EQU __Vectors_End - __Vectors:計算中斷向量表的長度

AREA |.text|, CODE, READONLY:定義為只讀代碼段

Reset_Handler PROC:表示復位中斷服務的入口

EXPORT Reset_Handler [WEAK]:這里聲明復位中斷向量為全局的,可供外部調用,WEAK標記本代碼為備用編譯

IMPORT SystemInit:表示導入systeminit

IMPORT __main:表示導入C庫中的main標號,這個是C庫中的內容,非我們自己的main函數

LDR R0, =SystemInit:讓R0等于SystemInit的地址

BLX R0:表示跳到systeminit

LDR R0, =__main:讓R0等于main的地址

BX R0:執行lib_init等C庫的初始化工作,結束后再進入用戶的main函數

ENDP:結束


三、虛擬異常處理程序

這里要進行說明的是[WEAK],weak標記說明:如果使用這個備用的函數(外部文件中沒有XXX_Handler),這里的B指令用nop替換,讓編譯器忽略,外部找不到任何NMI_Handler函數時的警告或錯誤。



四、用戶棧和堆初始化的一個過程



以上就是ARM啟動文件的主要內容。


主站蜘蛛池模板: 曲靖市| 琼海市| 信宜市| 安徽省| 原平市| 德钦县| 中牟县| 屏边| 沅陵县| 临江市| 祥云县| 龙泉市| 仪陇县| 安平县| 云南省| 永清县| 甘谷县| 玉山县| 水富县| 屏东县| 瓦房店市| 江津市| 泾源县| 宁都县| 青海省| 太谷县| 仙居县| 安岳县| 台江县| 喀什市| 六安市| 大冶市| 兴山县| 云安县| 呈贡县| 福建省| 霞浦县| 永丰县| 怀宁县| 遂平县| 威海市|