一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

3STM32啟動(dòng)文件詳解

 山峰云繞 2022-11-22 發(fā)布于貴州

啟動(dòng)文件

@[TOC]

https://www.toutiao.com/article/7159096038253412872/?log_from=8223069371bbe_1669088303396

啟動(dòng)文件簡(jiǎn)介

startup_stm32f429_439xx.s是STM32的啟動(dòng)文件
剛開始我一直認(rèn)為STM32程序開始執(zhí)行是從main函數(shù)開始。后來網(wǎng)上查查不是。原來在執(zhí)行main函數(shù)之前,需要先執(zhí)行一段匯編程序和完成C語(yǔ)言資源硬件的初始化工作**。就是一下幾個(gè)功能:

1--初始化棧指針MSP=_initial_sp。

2--初始化復(fù)位程序計(jì)數(shù)寄存器值=Reset_Handler。

3--初始化異常/ 中斷向量表。

4--系統(tǒng)時(shí)鐘配置。

5--C庫(kù)函數(shù)_main初始化用戶堆棧的調(diào)用。

2、文件啟動(dòng)步驟

1-在啟動(dòng)的時(shí)候,先對(duì)堆棧的大小定義,并在代碼區(qū)的起始位置建立異常中斷向量表。然后在復(fù)位中斷中服務(wù)程序中跳轉(zhuǎn)執(zhí)行C標(biāo)準(zhǔn)庫(kù)main函數(shù),以上這些完成后,跳轉(zhuǎn)到主程序中的main函數(shù)執(zhí)行相關(guān)函數(shù)應(yīng)用。但是假如STM32F429單片機(jī)被設(shè)置成從內(nèi)部flash啟動(dòng)的,這時(shí)候,片內(nèi)Flash被映射到程序啟動(dòng)空間,異常/中斷向量表實(shí)際的開始地址為0x8000000(查看STM32F4參考手冊(cè)可得到),則棧頂?shù)刂反娣旁?x8000000處,復(fù)位中斷存放在0x8000004處,若STM32F4遇到復(fù)位信號(hào),則從0x8000004處取出復(fù)位中斷服務(wù)入口地址,繼而執(zhí)行中斷服務(wù)函數(shù),繞后跳轉(zhuǎn)到main函數(shù),最終進(jìn)入main函數(shù)。由此我們可以得到下面這個(gè)圖:

啟動(dòng)代碼講解

1--棧(Stack)


在startup_stm32f429_439xx.s文件中,將棧的大小設(shè)為0x00000400(1KB)F429是0x30000(192KB),Stack_Mem為棧名,不初始化可讀可寫,8字節(jié)對(duì)齊。Stack_Size是棧的大小,__initial_sp表示結(jié)束地址(棧頂?shù)刂?,棧是由高字?jié)向低字節(jié)生長(zhǎng)的)。
棧的主要作用是用于局部變量、函數(shù)調(diào)用、函數(shù)形參的開銷大小應(yīng)小于內(nèi)部RAM大小,考慮到局部變量的需求,防止棧溢出。
EQU:宏定義的偽指令,相當(dāng)于等于,類似與 C 中的 define;
AREA:告訴匯編器匯編一個(gè)新的代碼段或者數(shù)據(jù)段;
SPACE:用于分配一定大小的內(nèi)存空間,單位為字節(jié);這里的大小等于Stack_Size。
DCD:數(shù)據(jù)定義( Data Definition )偽指令,單位是字(4字節(jié));
偽指令(Pseudo instruction):用于告訴匯編器如何進(jìn)行匯編的指令,不生成可執(zhí)行代碼。

總結(jié)如下圖:

2--堆(Heap)


在棧的代碼后面便是初始化堆的代碼,其中堆的大小設(shè)為0x00000200(512B),棧名為Heap_ Mem,不初始化,可讀可寫,8(23)字節(jié)對(duì)齊。Heap_Size為堆的大小,heap_base為堆的起始地址,heap_limit為堆的結(jié)束地址,因?yàn)槎咽怯傻偷刂废蚋叩刂飞L(zhǎng)的。
堆的作用是用于malloc()函數(shù)申請(qǐng)的動(dòng)態(tài)內(nèi)存的分配。

3--中斷向量表


PRESERVE8: 指定當(dāng)前文件的堆棧按照 8 字節(jié)對(duì)齊
THUMB: 表示后面指令為 THUMB 指令。 THUBM 是 ARM 以前的指令集, 16bit,現(xiàn)在 Cortex-M 系列的都使用 THUMB-2 指令集, THUMB-2 是 32 位的,兼容 16 位和 32 位的指令,是 THUMB 的超級(jí)

EXPORT: 聲明一個(gè)標(biāo)號(hào)具有全局屬性,可被外部的文件使用。如果是 IAR 編譯器,則使用的是 GLOBAL 這個(gè)指令


——Vectors是異常/中斷向量表的起始位置,_Vectors_End是中斷向量表的結(jié)束位置,
vectors__Size中斷向量表的大小。
以上總結(jié):


STM32F42XX/STM32F43XX部分中斷向量表

4--復(fù)位中斷服務(wù)程序


定義一個(gè)名為.text代碼段,可讀


復(fù)位中斷服務(wù)程序是系統(tǒng)上電后第一個(gè)執(zhí)行的程序,調(diào)用Systemlnit函數(shù)初始化系統(tǒng)時(shí)鐘,
然后調(diào)用C庫(kù)函數(shù)mian,最終調(diào)用 main 函數(shù)進(jìn)入C程序的世界。
LDR:從存儲(chǔ)器加載字到一個(gè)寄存器。
BL:跳轉(zhuǎn)到由寄存器/標(biāo)號(hào)給出的地址,并把跳轉(zhuǎn)前的下條指令地址保存到鏈接寄存器。
BLX:跳轉(zhuǎn)到由寄存器給出的地址,并根據(jù)寄存器的LSE確定處理器的狀態(tài),還要把跳轉(zhuǎn)前的下條指令地址保存到鏈接寄存器。
BX:跳轉(zhuǎn)到由寄存器/標(biāo)號(hào)給出的地址,不用返回。
WEAK:表示弱定義,如果外部文件優(yōu)先定義了該標(biāo)號(hào),則首先引用該標(biāo)號(hào),可以在C語(yǔ)言中重新定義中斷服務(wù)程序;如果在啟動(dòng)文件之外沒有重新定義中斷服務(wù)程序,則在對(duì)應(yīng)的異常/中斷向量表位置處存儲(chǔ)的是匯編文件定義的中斷服務(wù)程序入口地址。如果在啟動(dòng)文件外,在另外一個(gè)C文件中重新定義了中斷服務(wù)程序,則在對(duì)應(yīng)的異常/中斷向量表位置處存儲(chǔ)的是C文件中的中斷服務(wù)程序入口地址。需要注意的是,啟動(dòng)文件中的中斷服務(wù)程序的名稱和C文件中重新定義的中斷服務(wù)程序名稱必須保持一致。
IMPORT:表示該標(biāo)號(hào)來自外部文件,跟C語(yǔ)言中的關(guān)鍵字EXTERN類似。這里表示
Systemlnit 和main 這兩個(gè)函數(shù)均來自外部的文件。
Systemlnit是一個(gè)標(biāo)準(zhǔn)的庫(kù)函數(shù),在system_stm32f4xx.c這個(gè)庫(kù)文件中定義,主要作用是配置系統(tǒng)時(shí)鐘,在調(diào)用這個(gè)函數(shù)之后,STM32F429的系統(tǒng)時(shí)鐘被配置為180MHz。
main是一個(gè)標(biāo)準(zhǔn)的C庫(kù)函數(shù),主要作用是初始化用戶堆棧,最終調(diào)用main函數(shù)進(jìn)入C
程序的世界。在C應(yīng)用程序中,必須有一個(gè)main函數(shù)。需要注意的是,_main不是用戶C程序的main 函數(shù)。

5--異常和中斷服務(wù)程序

6--用戶堆棧初始化

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美一区二区三区喷汁尤物| 亚洲中文字幕在线视频频道| 亚洲欧美日本国产有色| 正在播放国产又粗又长| 午夜视频在线观看日韩| 亚洲精品国产主播一区| 国产成人精品综合久久久看| 亚洲最大福利在线观看| 久久99精品国产麻豆婷婷洗澡| 殴美女美女大码性淫生活在线播放 | 日韩欧美精品一区二区三区| 国产成人精品国产亚洲欧洲| 在线观看视频成人午夜| 日本少妇中文字幕不卡视频| 日韩在线视频精品视频| 国产精品一区二区香蕉视频| 少妇视频一区二区三区| 国产在线成人免费高清观看av| 色婷婷在线视频免费播放| 欧美午夜一级艳片免费看| 久久夜色精品国产高清不卡| 久久亚洲精品中文字幕| 日韩一区二区三区观看| 好吊色免费在线观看视频| 中文字幕无线码一区欧美| 色综合久久中文综合网| 国产精品福利一二三区| 日本乱论一区二区三区| 国产又粗又深又猛又爽又黄| 亚洲最新一区二区三区| 国产成人精品一区二三区在线观看 | 欧美人妻一区二区三区| 丰满的人妻一区二区三区| 国产伦精品一一区二区三区高清版 | 亚洲少妇人妻一区二区| 日本本亚洲三级在线播放| 日韩精品毛片视频免费看| 成人国产一区二区三区精品麻豆| 亚洲成人久久精品国产| 色偷偷亚洲女人天堂观看| 国产不卡最新在线视频|