一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的map文件詳細(xì)教程

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

掃碼添加小助手

加入工程師交流群

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

我們的芯片與其它的MCU芯片用起來(lái)都差不多一樣。我們?cè)谟肧T的時(shí)候,編譯完成,會(huì)生成很多文件,其中有一個(gè).map文件,里面包含的信息就是工程 ROM/FLASH 和 RAM 的占用情況 。之前只是關(guān)心.map文件的最后幾行的 ROM/FLASH占用信息,如:

STM32的map文件詳細(xì)教程

這次就得認(rèn)真的學(xué)習(xí)一下這個(gè)文件了,只有清楚的知道這些信息才可以很好的進(jìn)行代碼優(yōu)化 。下面我們來(lái)一起學(xué)習(xí)一下STM32的.map文件。(以下內(nèi)容來(lái)自于野火及安富萊教程文檔)

map文件

要生成 map 文件,MDK 中如下選項(xiàng)要選上:

STM32的map文件詳細(xì)教程

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

STM32的map文件詳細(xì)教程

map文件的內(nèi)容可分為如下幾部分:

1、節(jié)區(qū)的跨文件引用(Section Cross References) 2、刪除無(wú)用節(jié)區(qū)(Removing Unused input sections from the image) 3、符號(hào)映像表(Image Symbol Table (Local Symbols Global Symbols) 4、存儲(chǔ)器映像索引(Memory Map of the image) 5、映像組件大?。↖mage component sizes)

1、節(jié)區(qū)的跨文件引用

STM32的map文件詳細(xì)教程

這部分主要是不同文件中函數(shù)的調(diào)用關(guān)系。在這部分中,詳細(xì)列出了各個(gè).o 文件之間的符號(hào)引用。由于.o 文件是由 asm 或 c/c++源文件編譯后生成的,各個(gè)文件及文件內(nèi)的節(jié)區(qū)間互相獨(dú)立,鏈接器根據(jù)它們之間的互相引用鏈接起來(lái),鏈接的詳細(xì)信息在這個(gè)Section Cross References一一列出。

例如,開頭部分說(shuō)明的是 startup_stm32f429_439xx.o 文件中的“RESET”節(jié)區(qū)分為它使用的__initial_sp符號(hào)引用了同文件“STACK”節(jié)區(qū)。也許我們對(duì)啟動(dòng)文件不熟悉,不清楚這究竟是什么,那我們繼續(xù)瀏覽,可看到 main.o文件的引用說(shuō)明,如說(shuō)明 main.o 文件的 i.main 節(jié)區(qū)為它使用的 LED_GPIO_Config 符號(hào)引用了 bsp_led.o 文件的 i.LED_GPIO_Config 節(jié)區(qū)。

有時(shí)在構(gòu)建工程的時(shí)候,編譯器會(huì)輸出 “Undefined symbol xxx (referred from xxx.o)” 這樣的提示,該提示的原因就是在鏈接過(guò)程中,某個(gè)文件無(wú)法在外部找到它引用的標(biāo)號(hào),因而產(chǎn)生鏈接錯(cuò)誤。

2、刪除無(wú)用節(jié)區(qū)

map 文件的第二部分是刪除無(wú)用節(jié)區(qū)的說(shuō)明,見代碼清單 51-11。

STM32的map文件詳細(xì)教程

這部分列出了在鏈接過(guò)程它發(fā)現(xiàn)工程中未被引用的節(jié)區(qū),這些未被引用的節(jié)區(qū)將會(huì)被刪除(指不加入到.axf 文件,不是指在.o 文件刪除),這樣可以防止這些無(wú)用數(shù)據(jù)占用程序空間。

例如,上面的信息中說(shuō)明 startup_stm32f429_439xx.o 中的 HEAP(在啟動(dòng)文件中定義的用于動(dòng)態(tài)分配的“堆”區(qū))以及 stm32f4xx_adc.o 的各個(gè)節(jié)區(qū)都被刪除了,因?yàn)樵谖覀冞@個(gè)工程中沒(méi)有使用動(dòng)態(tài)內(nèi)存分配,也沒(méi)有引用任何 stm32f4xx_adc.c 中的內(nèi)容。由此也可以知道,雖然我們把 STM32 標(biāo)準(zhǔn)庫(kù)的各個(gè)外設(shè)對(duì)應(yīng)的 c 庫(kù)文件都添加到了工程,但不必?fù)?dān)心這會(huì)使工程變得臃腫,因?yàn)槲幢灰玫墓?jié)區(qū)內(nèi)容不會(huì)被加入到最終的機(jī)器碼文件中。

對(duì)于這個(gè)部分功能,用戶最好將 MDK 中這個(gè)選項(xiàng)勾上,然后全編譯工程,效果會(huì)比較好:

STM32的map文件詳細(xì)教程

3、符號(hào)映像表

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

STM32的map文件詳細(xì)教程

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

4、存儲(chǔ)器映像索引

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

STM32的map文件詳細(xì)教程

映像文件可以分為加載域(Load Region)和運(yùn)行域(Execution Region) 。簡(jiǎn)單的說(shuō),加載域就是程序在 Flash 中的實(shí)際存儲(chǔ),而運(yùn)行域是芯片上電后的運(yùn)行狀態(tài),通過(guò)下面的框圖可以有一個(gè)感性的認(rèn)識(shí):

STM32的map文件詳細(xì)教程

通過(guò)上面的框圖可以看出,RW 區(qū)也是要存儲(chǔ)到 ROM/Flash 里面的,在執(zhí)行映像之前,必須將已初始化的 RW 數(shù)據(jù)從 ROM 中復(fù)制到 RAM 中的執(zhí)行地址并創(chuàng)建 ZI Section(初始化為 0 的變量區(qū))。

本工程的存儲(chǔ)器映像索引分為 ER_IROM1 及 RW_IRAM1 部分,它們分別對(duì)應(yīng) STM32內(nèi)部 FLASH 及 SRAM 的空間。相對(duì)于符號(hào)映像表,這個(gè)索引表描述的單位是節(jié)區(qū),而且它描述的主要信息中包含了節(jié)區(qū)的類型及屬性,由此可以區(qū)分 Code、 RO-data、 RW-data及 ZI-data。

例如,從上面的表中我們可以看到 i.LED_GPIO_Config 節(jié)區(qū)存儲(chǔ)在內(nèi)部 FLASH 的0x080002a4 地址,大小為 0x00000074,類型為 Code,屬性為 RO。而程序的 STACK 節(jié)區(qū)(??臻g)存儲(chǔ)在 SRAM 的 0x20000000 地址,大小為 0x00000400,類型為 Zero,屬性為RW(即 RW-data) 。

5、映像組件大小

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

STM32的map文件詳細(xì)教程

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

綜合整個(gè) map 文件的信息,可以分析出,當(dāng)程序下載到 STM32 的內(nèi)部 FLASH 時(shí),需要使用的內(nèi)部 FLASH 是從 0x0800 0000 地址開始的大小為 1456 字節(jié)的空間;當(dāng)程序運(yùn)行時(shí),需要使用的內(nèi)部 SRAM 是從 0x20000000 地址開始的大小為 1024 字節(jié)的空間。

總結(jié)

對(duì)照著這個(gè)map文件再看看我的程序,就可以知道哪里占的flash空間多了。硬件相關(guān)的部分已經(jīng)用寄存器來(lái)操作,協(xié)議處理部分占用的flash空間最多。

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1679

    瀏覽量

    151843
  • STM32
    +關(guān)注

    關(guān)注

    2293

    文章

    11032

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    STM32G431移植FreeModbus

    STM32G431移植FreeModbus 的代碼已通過(guò)驗(yàn)證,在WeActStudio的STM32G431CoreBoard上進(jìn)行多次測(cè)試,均可正常讀取寄存器數(shù)值。STM32G431CoreBoard可在我上傳的相關(guān)
    發(fā)表于 04-19 16:50 ?1次下載

    S32G3有沒(méi)有辦法從.map文件確定SRAM使用情況?

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

    STM32H743對(duì)關(guān)鍵中斷函數(shù),使用ITCM搬至RAM運(yùn)行,仿真進(jìn)入HardFault_Handler報(bào)錯(cuò)怎么解決?

    STM32H743對(duì)關(guān)鍵中斷函數(shù),使用ITCM搬至RAM運(yùn)行,STM32CubeIDE仿真進(jìn)入HardFault_Handler報(bào)錯(cuò)。其中,ITCM已查找網(wǎng)上多篇教程,修改了ld鏈接文件
    發(fā)表于 03-07 08:04

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

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

    STM32開發(fā)板教程之STM32開發(fā)指南免費(fèi)下載

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

    STM32F1開發(fā)指南

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

    小白必看!Gerber文件詳細(xì)解讀

    在電子制造領(lǐng)域,Gerber 文件可是大名鼎鼎,它堪稱是 PCB(Printed Circuit Board,印刷電路板)制造的 “設(shè)計(jì)藍(lán)圖”。從簡(jiǎn)單的電子小玩意兒,到復(fù)雜高端的航天設(shè)備,只要涉及
    的頭像 發(fā)表于 12-30 10:49 ?1.8w次閱讀
    小白必看!Gerber<b class='flag-5'>文件</b>超<b class='flag-5'>詳細(xì)</b>解讀

    月產(chǎn)3萬(wàn)片,U-MAP與岡本硝子合作量產(chǎn)銷售AlN陶瓷基板

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

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

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

    深入解析Tricore的Tasking鏈接文件

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

    stm32單片機(jī)基于rt-thread 的 littlefs 文件系統(tǒng) 的使用

    作者:嵌入式學(xué)習(xí)和實(shí)踐一、開發(fā)環(huán)境介紹硬件:基于野火stm32f407開發(fā)板軟件:基于rt-threadv4.1.1版本的stm32f407-atk-explorerbsp工程。二、littlefs
    的頭像 發(fā)表于 11-06 08:04 ?3010次閱讀
    <b class='flag-5'>stm32</b>單片機(jī)基于rt-thread 的 littlefs <b class='flag-5'>文件</b>系統(tǒng) 的使用

    bin文件怎么燒錄到stm32

    燒錄bin文件STM32微控制器是一個(gè)相對(duì)復(fù)雜的過(guò)程,涉及到硬件連接、軟件配置和固件燒錄等多個(gè)方面。 一、硬件準(zhǔn)備 STM32開發(fā)板 STM32開發(fā)板是燒錄bin
    的頭像 發(fā)表于 08-22 09:38 ?4386次閱讀

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

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

    第19.1 章-星瞳科技 OpenMV視覺(jué)循跡功能 超詳細(xì)OpenMV與STM32單片機(jī)通信

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