女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

STM32的map文件詳細教程

汽車玩家 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2020-04-04 17:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前幾個月針對公司自己的芯片寫了個程序,這個程序有個硬性要求,就是能用的FLASH空間只有4KB,之前已經寫得差不多了,最終占用空間3.6KB。這不,最近又得加需求,還剩一點點FLASH空間可以使用,這該如何是好。需求已經加過來了,不行也得行啊。所以就得去優化之前的代碼了,這就得研究比較底層的東西了。

我們的芯片與其它的MCU芯片用起來都差不多一樣。我們在用ST的時候,編譯完成,會生成很多文件,其中有一個.map文件,里面包含的信息就是工程 ROM/FLASH 和 RAM 的占用情況 。之前只是關心.map文件的最后幾行的 ROM/FLASH占用信息,如:

STM32的map文件詳細教程

這次就得認真的學習一下這個文件了,只有清楚的知道這些信息才可以很好的進行代碼優化 。下面我們來一起學習一下STM32的.map文件。(以下內容來自于野火及安富萊教程文檔)

map文件

要生成 map 文件,MDK 中如下選項要選上:

STM32的map文件詳細教程

將工程全編譯,且沒有錯誤后,雙擊這里就可以看到生成的 map 文件了:

STM32的map文件詳細教程

map文件的內容可分為如下幾部分:

1、節區的跨文件引用(Section Cross References) 2、刪除無用節區(Removing Unused input sections from the image) 3、符號映像表(Image Symbol Table (Local Symbols Global Symbols) 4、存儲器映像索引(Memory Map of the image) 5、映像組件大小(Image component sizes)

1、節區的跨文件引用

STM32的map文件詳細教程

這部分主要是不同文件中函數的調用關系。在這部分中,詳細列出了各個.o 文件之間的符號引用。由于.o 文件是由 asm 或 c/c++源文件編譯后生成的,各個文件及文件內的節區間互相獨立,鏈接器根據它們之間的互相引用鏈接起來,鏈接的詳細信息在這個Section Cross References一一列出。

例如,開頭部分說明的是 startup_stm32f429_439xx.o 文件中的“RESET”節區分為它使用的__initial_sp符號引用了同文件“STACK”節區。也許我們對啟動文件不熟悉,不清楚這究竟是什么,那我們繼續瀏覽,可看到 main.o文件的引用說明,如說明 main.o 文件的 i.main 節區為它使用的 LED_GPIO_Config 符號引用了 bsp_led.o 文件的 i.LED_GPIO_Config 節區。

有時在構建工程的時候,編譯器會輸出 “Undefined symbol xxx (referred from xxx.o)” 這樣的提示,該提示的原因就是在鏈接過程中,某個文件無法在外部找到它引用的標號,因而產生鏈接錯誤。

2、刪除無用節區

map 文件的第二部分是刪除無用節區的說明,見代碼清單 51-11。

STM32的map文件詳細教程

這部分列出了在鏈接過程它發現工程中未被引用的節區,這些未被引用的節區將會被刪除(指不加入到.axf 文件,不是指在.o 文件刪除),這樣可以防止這些無用數據占用程序空間。

例如,上面的信息中說明 startup_stm32f429_439xx.o 中的 HEAP(在啟動文件中定義的用于動態分配的“堆”區)以及 stm32f4xx_adc.o 的各個節區都被刪除了,因為在我們這個工程中沒有使用動態內存分配,也沒有引用任何 stm32f4xx_adc.c 中的內容。由此也可以知道,雖然我們把 STM32 標準庫的各個外設對應的 c 庫文件都添加到了工程,但不必擔心這會使工程變得臃腫,因為未被引用的節區內容不會被加入到最終的機器碼文件中。

對于這個部分功能,用戶最好將 MDK 中這個選項勾上,然后全編譯工程,效果會比較好:

STM32的map文件詳細教程

3、符號映像表

map 文件的第三部分是符號映像表(Image Symbol Table), 見代碼清單 51-12。

STM32的map文件詳細教程

這個表列出了被引用的各個符號在存儲器中的具體地址、占據的空間大小等信息。如我們可以查到LED_GPIO_Config 符號存儲在 0x080002a5 地址,它屬于 Thumb Code 類型,大小為 106 字節,它所在的節區為 bsp_led.o 文件的 i.LED_GPIO_Config 節區。

4、存儲器映像索引

map 文件的第四部分是存儲器映像索引(Memory Map of the image), 見代碼清單:

STM32的map文件詳細教程

映像文件可以分為加載域(Load Region)和運行域(Execution Region) 。簡單的說,加載域就是程序在 Flash 中的實際存儲,而運行域是芯片上電后的運行狀態,通過下面的框圖可以有一個感性的認識:

STM32的map文件詳細教程

通過上面的框圖可以看出,RW 區也是要存儲到 ROM/Flash 里面的,在執行映像之前,必須將已初始化的 RW 數據從 ROM 中復制到 RAM 中的執行地址并創建 ZI Section(初始化為 0 的變量區)。

本工程的存儲器映像索引分為 ER_IROM1 及 RW_IRAM1 部分,它們分別對應 STM32內部 FLASH 及 SRAM 的空間。相對于符號映像表,這個索引表描述的單位是節區,而且它描述的主要信息中包含了節區的類型及屬性,由此可以區分 Code、 RO-data、 RW-data及 ZI-data。

例如,從上面的表中我們可以看到 i.LED_GPIO_Config 節區存儲在內部 FLASH 的0x080002a4 地址,大小為 0x00000074,類型為 Code,屬性為 RO。而程序的 STACK 節區(棧空間)存儲在 SRAM 的 0x20000000 地址,大小為 0x00000400,類型為 Zero,屬性為RW(即 RW-data) 。

5、映像組件大小

map 文件的最后一部分是包含映像組件大小的信息(Image component sizes),這也是最常查詢的內容,見代碼清單 :

STM32的map文件詳細教程

這部分包含了各個使用到的*.o 文件的空間匯總信息、整個工程的空間匯總信息以及占用不同類型存儲器的空間匯總信息,它們分類描述了具體占據的 Code、 RO-data、 RW-data及 ZI-data 的大小,并根據這些大小統計出占據的 ROM 總空間。

綜合整個 map 文件的信息,可以分析出,當程序下載到 STM32 的內部 FLASH 時,需要使用的內部 FLASH 是從 0x0800 0000 地址開始的大小為 1456 字節的空間;當程序運行時,需要使用的內部 SRAM 是從 0x20000000 地址開始的大小為 1024 字節的空間。

總結

對照著這個map文件再看看我的程序,就可以知道哪里占的flash空間多了。硬件相關的部分已經用寄存器來操作,協議處理部分占用的flash空間最多。

最后,對于.map文件,我們一般只需要了解最后幾行即可。如果想要深入學習,可以參照野火及安富萊的教程文檔進行學習。

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

    關注

    10

    文章

    1678

    瀏覽量

    151753
  • STM32
    +關注

    關注

    2293

    文章

    11031

    瀏覽量

    364717
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【正點原子STM32MP257開發板試用】基于 DeepLab 模型的圖像分割

    import NeuralNetwork def load_label_map(label_file): \"\"\"從標簽文件加載類別映射關系(每行一個類別
    發表于 06-21 21:11

    飛凌嵌入式ElfBoard ELF 1板卡-uboot編譯system.map/uboot.map

    情況。u-boot.map中包含了鏈接過程中涉及到的目標文件以及其所依賴的庫文件中的各個符號的地址信息,以及我們所涉及到的函數所在目錄信息,這里不再展開講,有興趣的同學可以自己查看研究。
    發表于 05-22 11:22

    STM32G431移植FreeModbus

    STM32G431移植FreeModbus 的代碼已通過驗證,在WeActStudio的STM32G431CoreBoard上進行多次測試,均可正常讀取寄存器數值。STM32G431CoreBoard可在我上傳的相關
    發表于 04-19 16:50 ?1次下載

    S32G3有沒有辦法從.map文件確定SRAM使用情況?

    我有 NXP S32G3 板。我有 .map 文件。有沒有辦法從 .map 文件確定 SRAM 使用情況。 非常感謝幫助。
    發表于 04-08 06:00

    STM32H743對關鍵中斷函數,使用ITCM搬至RAM運行,仿真進入HardFault_Handler報錯怎么解決?

    STM32H743對關鍵中斷函數,使用ITCM搬至RAM運行,STM32CubeIDE仿真進入HardFault_Handler報錯。其中,ITCM已查找網上多篇教程,修改了ld鏈接文件
    發表于 03-07 08:04

    模型無法獲得mAP值等于1.00的原因是什么?

    量化了大小為 416 x 416 的 YOLOv4 模型,并獲得了正確的 mAP 值。 使用以下命令量化大小為 320 x 544 的 YOLOv4 模型:pot -c
    發表于 03-07 07:21

    STM32開發板教程之STM32開發指南免費下載

    介紹了幾個常用的系統文件(程序);3,實戰篇,主要通過 56 個實例(絕大部分是直接操作寄存器完成的)帶領大家一步步深入 STM32 的學習。   本指南為 ALIENTEK 戰艦 STM32 開發板的配套教程,在開發板
    發表于 02-28 09:08 ?179次下載

    STM32F1開發指南

    這本書詳細講述了STM32HAL庫開發的配置流程,非常詳細
    發表于 01-21 15:33 ?3次下載

    月產3萬片,U-MAP與岡本硝子合作量產銷售AlN陶瓷基板

    2024年11月28日,專門從事散熱材料的初創公司U-MAP株式會社與岡本硝子株式會社宣布建立AlN(氮化鋁)陶瓷基板的量產體系,并達成資本和業務合作協議。由此,目前已經建立了月產3萬片4.5英寸
    的頭像 發表于 12-03 09:26 ?635次閱讀

    FPD-link裕量分析程序(MAP)用戶指南

    電子發燒友網站提供《FPD-link裕量分析程序(MAP)用戶指南.pdf》資料免費下載
    發表于 11-26 15:49 ?0次下載
    FPD-link裕量分析程序(<b class='flag-5'>MAP</b>)用戶指南

    深入解析Tricore的Tasking鏈接文件

    目錄 1.鏈接文件有什么用? 2.文件結構和語法解析 2.1 文件結構 2.2 語法解析 3.小結 玩慣了ld文件,突然讓搞lsl文件,被其
    的頭像 發表于 11-12 16:31 ?1847次閱讀
    深入解析Tricore的Tasking鏈接<b class='flag-5'>文件</b>

    stm32單片機基于rt-thread 的 littlefs 文件系統 的使用

    作者:嵌入式學習和實踐一、開發環境介紹硬件:基于野火stm32f407開發板軟件:基于rt-threadv4.1.1版本的stm32f407-atk-explorerbsp工程。二、littlefs
    的頭像 發表于 11-06 08:04 ?2968次閱讀
    <b class='flag-5'>stm32</b>單片機基于rt-thread 的 littlefs <b class='flag-5'>文件</b>系統 的使用

    bin文件怎么燒錄到stm32

    燒錄bin文件STM32微控制器是一個相對復雜的過程,涉及到硬件連接、軟件配置和固件燒錄等多個方面。 一、硬件準備 STM32開發板 STM32開發板是燒錄bin
    的頭像 發表于 08-22 09:38 ?4343次閱讀

    第12章-ADC采集電壓和顯示 基于STM32的ADC—電壓采集(詳細講解+HAL庫)

    第12章-ADC采集電壓和顯示 基于STM32的ADC—電壓采集(詳細講解+HAL庫)
    的頭像 發表于 08-21 16:31 ?5297次閱讀
    第12章-ADC采集電壓和顯示 基于<b class='flag-5'>STM32</b>的ADC—電壓采集(<b class='flag-5'>詳細</b>講解+HAL庫)

    第19.1 章-星瞳科技 OpenMV視覺循跡功能 超詳細OpenMV與STM32單片機通信

    第19.1 章-[星瞳科技]OpenMV視覺循跡功能 超詳細OpenMV與STM32單片機通信 (有完整版源碼) 【星曈科技】OpenMv筆記——利用OpenMV與STM32進行串口通信
    的頭像 發表于 08-20 11:41 ?1690次閱讀
    第19.1 章-星瞳科技 OpenMV視覺循跡功能 超<b class='flag-5'>詳細</b>OpenMV與<b class='flag-5'>STM32</b>單片機通信