色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32啟動文件簡介、詳細步驟及代碼講解

CHANBAEK ? 來源:南山府嵌入式 ? 作者:南山府嵌入式 ? 2023-01-19 17:57 ? 次閱讀

01啟動文件簡介

startup_stm32f429_439xx.s是STM32的啟動文件。

剛開始我一直認為STM32程序開始執行是從main函數開始。后來網上查查不是。原來在執行main函數之前,需要先執行一段匯編程序和完成C語言資源硬件的初始化工作。就是以下幾個功能:

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

2--初始化復位程序計數寄存器值=Reset_Handler。

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

4--系統時鐘配置。

5--C庫函數_main初始化用戶堆棧的調用 。

02文件啟動步驟

1-在啟動的時候,先對堆棧的大小定義,并在代碼區的起始位置建立異常中斷向量表。然后在復位中斷中服務程序中跳轉執行C標準庫main函數,以上這些完成后,跳轉到主程序中的main函數執行相關函數應用。但是假如STM32F429單片機被設置成從內部flash啟動的,這時候,片內Flash被映射到程序啟動空間,異常/中斷向量表實際的開始地址為0x8000000(查看STM32F4參考手冊可得到),則棧頂地址存放在0x8000000處,復位中斷存放在0x8000004處,若STM32F4遇到復位信號,則從0x8000004處取出復位中斷服務入口地址,繼而執行中斷服務函數,繞后跳轉到main函數,最終進入main函數。由此我們可以得下面這個圖:

在這里插入圖片描述

03啟動代碼講解

01棧(Stack)

我們可以在.s這個文件中看到堆棧信息如圖:

Alt

根據上面的圖片我們可以知道。

在startup_stm32f429_439xx.s文件中,將棧的大小設為0x00000400(1KB)F429是0x30000(192KB),Stack_Mem為棧名,不初始化可讀可寫,8字節對齊。Stack_Size是棧的大小,__initial_sp表示結束地址(棧頂地址,棧是由高字節向低字節生長的)。

棧的主要作用是用于局部變量、函數調用、函數形參的開銷大小應小于內部RAM大小,考慮到局部變量的需求,防止棧溢出。

EQU:宏定義的偽指令,相當于等于,類似與 C 中的 define;

AREA:告訴匯編器匯編一個新的代碼段或者數據段;

SPACE:用于分配一定大小的內存空間,單位為字節;這里的大小等于Stack_Size。

DCD:數據定義( Data Definition )偽指令,單位是字(4字節);

偽指令(Pseudo instruction):用于告訴匯編器如何進行匯編的指令,不生成可執行代碼。

總結如下圖所示:

Dingtalk_20221206154648.jpg

02堆(Heap)

在.s54行中如下圖這些代碼:

在這里插入圖片描述

這些代碼中,堆的大小設為0x00000200(512B),其中Heap_ Mem是棧名,不初始化,可讀可寫,8(23)字節對齊。Heap_Size為堆的大小, heap_base為堆的起始地址,heap_limit為堆的結束地址,因為堆是由低地址向高地址生長的。

堆的作用是用于malloc()函數申請的動態內存的分配。

04中斷向量表

在這里插入圖片描述

PRESERVE8:指定當前文件的堆棧按照 8 字節對齊THUMB:表示后面指令為 THUMB 指令。THUBM 是 ARM 以前的指令集, 16bit,現在 Cortex-M 系列的都使用 THUMB-2 指令集, THUMB-2 是 32 位的,兼容 16 位和 32 位的指令,是 THUMB 的超級!

Dingtalk_20221206154648.jpg

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

在這里插入圖片描述

——Vectors是異常/中斷向量表的起始位置,_Vectors_End是中斷向量表的結束位置,vectors__Size中斷向量表的大小。

TM32F42XX/STM32F43XX部分中斷向量表

在中斷向量表中的每一個位置存儲都是一個4字節服務程序入口地址,如果有中斷請求并且MCU進行了請求的響應,那么MCU就會找到向量表中找到對應的中斷位置,找到中斷復位程序入口地址到程序計數寄存器,進而執行中斷。

在這里插入圖片描述

在這里插入圖片描述

具體的詳細中斷向量表請參看數據手冊以及啟動文件。

05復位中斷服務程序

在這里插入圖片描述

這句話的意思是定義一個名為.text代碼段,可讀

在這里插入圖片描述

復位中斷服務程序是系統上電后第一個執行的程序,調用Systemlnit函數初始化系統時鐘,然后調用C庫函數mian,最終調用 main 函數進入C程序的世界。

LDR:從存儲器加載字到一個寄存器

BL:跳轉到由寄存器/標號給出的地址,并把跳轉前的下條指令地址保存到鏈接寄存器。

BLX:跳轉到由寄存器給出的地址,并根據寄存器的LSE確定處理器的狀態,還要把跳轉前的下條指令地址保存到鏈接寄存器。

BX:跳轉到由寄存器/標號給出的地址,不用返回。

WEAK:表示弱定義,如果外部文件優先定義了該標號,則首先引用該標號,可以在C語言中重新定義中斷服務程序;如果在啟動文件之外沒有重新定義中斷服務程序,則在對應的異常/中斷向量表位置處存儲的是匯編文件定義的中斷服務程序入口地址。如果在啟動文件外,在另外一個C文件中重新定義了中斷服務程序,則在對應的異常/中斷向量表位置處存儲的是C文件中的中斷服務程序入口地址。需要注意的是,啟動文件中的中斷服務程序的名稱和C文件中重新定義的中斷服務程序名稱必須保持一致。

IMPORT:表示該標號來自外部文件,跟C語言中的關鍵字EXTERN類似。這里表示Systemlnit 和main 這兩個函數均來自外部的文件。

Systemlnit是一個標準的庫函數,在system_stm32f4xx.c這個庫文件中定義,主要作用是配置系統時鐘,在調用這個函數之后,STM32F429的系統時鐘被配置為180MHz。

main是一個標準的C庫函數,主要作用是初始化用戶堆棧,最終調用main函數進入C程序的世界。在C應用程序中,必須有一個main函數。需要注意的是,_main不是用戶C程序的main 函數。

異常和中斷服務程序

Dingtalk_20221206154648.jpg

Dingtalk_20221206154648.jpg

07用戶堆棧初始化

Dingtalk_20221206154648.jpg

判斷是否定義了__MICROLIB,如果定義了則賦予標號__initial_sp(棧頂地址)、__heap_base(堆起始地址)、__heap_limit(堆結束地址)全局屬性,可供外部文件調用。如果沒有定義(實際的情況就是我們沒定義__MICROLIB),則使用默認的C庫函數,然后初始化用戶堆棧大小,這部分由C庫函數__main來完成,當初始化完堆棧之后,就調用main函數去到C程序的世界。

IF、ELSE、ENDIF:匯編的條件分支語句,跟C語言的if、else類似。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2270

    文章

    10923

    瀏覽量

    357076
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137421
  • 函數
    +關注

    關注

    3

    文章

    4345

    瀏覽量

    62870
  • 啟動文件
    +關注

    關注

    0

    文章

    15

    瀏覽量

    2272
收藏 人收藏

    評論

    相關推薦

    詳解STM32啟動文件

    本文對STM32啟動文件startup_stm32f10x_hd.s的代碼進行講解,此
    發表于 06-10 17:19 ?1026次閱讀
    詳解<b class='flag-5'>STM32</b><b class='flag-5'>啟動</b><b class='flag-5'>文件</b>

    STM32Cube用法以及自動生成的代碼講解

    文章目錄前言操作步驟打開軟件新建工程配置時鐘配置GPIO生成源代碼編寫代碼實驗驗證源碼講解delay相關while循環自動生成前言本文主要介紹STM
    發表于 08-10 06:21

    學習STM32啟動代碼的方法步驟

    學習STM32啟動代碼的方法步驟
    發表于 11-29 06:34

    STM32單片機的啟動文件簡介

    啟動文件簡介啟動文件由匯編編寫,是系統上電復位后第一個執行的程序。主要做了以下工作:1、初始化堆棧指針SP=_initial_sp2、初始化
    發表于 12-06 08:09

    STM32啟動文件步驟啟動代碼講解

    。5--C庫函數_main初始化用戶堆棧的調用。2、文件啟動步驟啟動代碼講解1--棧(Stack
    發表于 02-21 07:27

    STM32啟動文件資料免費下載

    本文檔的主要內容詳細介紹的是STM32啟動文件資料免費下載。
    發表于 06-22 08:00 ?38次下載
    <b class='flag-5'>STM32</b>的<b class='flag-5'>啟動</b><b class='flag-5'>文件</b>資料免費下載

    STM32啟動文件內容詳解

    的參考資料和分析參考《STM32F10X-中文參考手冊》中的第九章-中斷和事件:表 55 其他 STM32F10xxx 產品(小容量、中容量和大容量)的向量表; MDK 中的幫助手冊—ARM Development Tools:用來查詢ARM 的匯編指令和編譯器相關的指令
    發表于 11-30 13:21 ?8次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>啟動</b><b class='flag-5'>文件</b>內容詳解

    STM32啟動過程--啟動文件--分析

    、中斷向量安排等內容,是非常值得玩味的?! ?b class='flag-5'>STM32作為一款高端Cortex-M3系列單片機,有必要了解它的啟動文件。打好基礎,為以后優化程序,寫出高質量的代碼最準備。  本文以一個
    發表于 11-30 13:21 ?4次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>啟動</b>過程--<b class='flag-5'>啟動</b><b class='flag-5'>文件</b>--分析

    stm32啟動文件分析

    stm32啟動文件分析
    發表于 12-09 13:06 ?17次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>啟動</b><b class='flag-5'>文件</b>分析

    STM32啟動文件分析

    STM32啟動文件分析前言啟動文件解析首先進行堆和棧的初始化接下來初始化中斷向量表復位中斷函數其余中斷函數
    發表于 12-22 19:05 ?9次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>啟動</b><b class='flag-5'>文件</b>分析

    3-STM32啟動文件詳解

    。5--C庫函數_main初始化用戶堆棧的調用。2、文件啟動步驟啟動代碼講解1--棧(Stack
    發表于 12-27 18:41 ?14次下載
    3-<b class='flag-5'>STM32</b><b class='flag-5'>啟動</b><b class='flag-5'>文件</b>詳解

    關于STM32啟動文件startup_stm32f10x_hd.s的代碼

    本文對STM32啟動文件startup_stm32f10x_hd.s的代碼進行講解,此
    的頭像 發表于 07-06 17:26 ?4228次閱讀

    STM32啟動文件分享

    STM32啟動文件分享
    發表于 09-28 11:20 ?9次下載

    STM32啟動文件startup_stm32f10x_hd.s的代碼講解

    本文對STM32啟動文件startup_stm32f10x_hd.s的代碼進行講解,此
    的頭像 發表于 06-22 10:31 ?4679次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>啟動</b><b class='flag-5'>文件</b>startup_<b class='flag-5'>stm32</b>f10x_hd.s的<b class='flag-5'>代碼</b><b class='flag-5'>講解</b>

    STM32啟動文件

    STM32啟動文件
    發表于 08-21 10:27 ?2次下載
    主站蜘蛛池模板: 37大但人文艺术A级都市天气 | 国产精品人妻一区免费看8C0M | a视频免费看 | 精品一区二区三区色花堂 | 秋葵app秋葵官网18在线观看 | 亚洲黄视频在线观看 | 国产精品永久免费视频观看 | 影音先锋亚洲AV少妇熟女 | 久久精视频 | 国产剧情福利AV一区二区 | 国产午夜亚洲精品一区 | 天天狠狠弄夜夜狠狠躁·太爽了 | 男人国产AV天堂WWW麻豆 | 最近更新2019中文字幕国语 | 久久久精品成人免费看 | 精品 在线 视频 亚洲 | 国产精品青青草原app大全 | 国产精品视频第一区二区三区 | 久久日韩精品无码一区 | 第一次处破女完整版电影 | 无人影院在线播放视频 | 美女被打开了屁股进去的视频 | 国产精品久久久久久亚洲影视 | 狠狠色狠狠色综合系列 | 国内精品欧美久久精品 | 4399日本电影完整版在线观看免费 | 性888xxxx入欧美 | 伊人久久综在合线亚洲 | 伊人久久综合热青草 | 亚洲中文在线偷拍 | 久久机热视频 这里只有精品首页 | 男人J进女人P | 扒开她的黑森林让我添动态图 | 大学生第一次破女在线观看 | 欧美精品一区二区三区四区 | 亚洲天堂2017无码 | yellow高清免费观看日本 | 龙腾亚洲人成电影网站 | 视频成人永久免费看 | 亚洲AV综合99一二三四区 | 久久国产香蕉 |