在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

STM32的map文件詳細教程

汽車玩家 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2020-04-04 17:19 ? 次閱讀

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

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

STM32的map文件詳細教程

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

map文件

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

STM32的map文件詳細教程

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

STM32的map文件詳細教程

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

1、節(jié)區(qū)的跨文件引用(Section Cross References) 2、刪除無用節(jié)區(qū)(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、節(jié)區(qū)的跨文件引用

STM32的map文件詳細教程

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

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

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

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

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

STM32的map文件詳細教程

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

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

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

STM32的map文件詳細教程

3、符號映像表

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

STM32的map文件詳細教程

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

4、存儲器映像索引

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

STM32的map文件詳細教程

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

STM32的map文件詳細教程

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

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

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

5、映像組件大小

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

STM32的map文件詳細教程

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

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

總結

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

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

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

    關注

    10

    文章

    1668

    瀏覽量

    151065
  • STM32
    +關注

    關注

    2290

    文章

    11018

    瀏覽量

    362660
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

    STM32G431移植FreeModbus

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

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

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

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

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

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

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

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

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

    STM32F1開發(fā)指南

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

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

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

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

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

    深入解析Tricore的Tasking鏈接文件

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

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

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

    bin文件怎么燒錄到stm32

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

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

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

    關于esp8266 fash map的相關問題求解答

    我的esp8266的flash map是4096KB,我在編譯的第五步時選擇4=4096KB(512KB+512KB)與6=4096KB(1024KB+1024KB)時,flash map 有什么區(qū)別
    發(fā)表于 07-08 07:49

    請問哪種型號的藍牙或WIFI/bt組合支持A2DP、AVRCP、HFP、MAP 1.3.1或1.4.2配置文件

    請問哪種型號的藍牙或 WIFI/bt 組合支持 A2DP、AVRCP、HFP、MAP 1.3.1 或 1.4.2 配置文件? 謝謝!
    發(fā)表于 07-05 06:28
    主站蜘蛛池模板: 成人在线看片 | 精品理论片 | 亚洲啊v| 77788色淫免费网站视频 | 天堂资源bt种子在线 | 性网站视频 | 亚洲国产视频一区 | 久久精品夜夜夜夜夜久久 | 人人干人人看 | 欧美成人伊人十综合色 | 天天艹天天 | 国产女人18毛片水真多18精品 | 色香淫欲 | аⅴ资源天堂8在线 | 亚洲精品视频在线 | 一区二区三区网站 | 国产一区在线mmai | 天天爱夜夜做 | 四虎影院免费观看视频 | 狠狠天天 | 黄网站色视频免费看无下截 | 国产三级在线观看播放 | 免费在线视频你懂的 | 国产一级特黄aa大片爽爽 | 美女被免费视频网站九色 | 性视频久久| www.色偷偷| 特黄特a级特别特级特毛片 特黄特色大片免费播放路01 | 天天操天天操天天射 | 国产成人亚洲影视在线 | 天天操狠狠操 | 国模在线视频 | 天天爽夜夜爽精品免费 | 午夜影院在线视频 | 国语自产拍在线观看7m | 老司机狠狠k免费毛片 | 美女扒开尿口让男生添 漫画 | 99r8这里精品热视频免费看 | 人与牲动交xxxxbbbb | 国产精品乳摇在线播放 | 毛片网站免费 |