日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

STM32的map文件詳細教程

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

掃碼添加小助手

加入工程師交流群

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

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

STM32的map文件詳細教程

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

map文件

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

STM32的map文件詳細教程

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

STM32的map文件詳細教程

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

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ù)的調(diào)用關(guān)系。在這部分中,詳細列出了各個.o 文件之間的符號引用。由于.o 文件是由 asm 或 c/c++源文件編譯后生成的,各個文件及文件內(nèi)的節(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ū)。

有時在構(gòu)建工程的時候,編譯器會輸出 “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)內(nèi)存分配,也沒有引用任何 stm32f4xx_adc.c 中的內(nèi)容。由此也可以知道,雖然我們把 STM32 標準庫的各個外設(shè)對應(yīng)的 c 庫文件都添加到了工程,但不必擔心這會使工程變得臃腫,因為未被引用的節(jié)區(qū)內(nèi)容不會被加入到最終的機器碼文件中。

對于這個部分功能,用戶最好將 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 中復(fù)制到 RAM 中的執(zhí)行地址并創(chuàng)建 ZI Section(初始化為 0 的變量區(qū))。

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

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

5、映像組件大小

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

STM32的map文件詳細教程

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

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

總結(jié)

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

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

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

    關(guān)注

    10

    文章

    1761

    瀏覽量

    155999
  • STM32
    +關(guān)注

    關(guān)注

    2313

    文章

    11197

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    吃透RK3576 U-Boot.map文件!嵌入式開發(fā)調(diào)試、性能優(yōu)化、代碼裁剪全攻略

    作為嵌入式開發(fā)工程師,你是否曾被?U-Boot?啟動崩潰、固件體積過大、啟動速度慢等問題困擾?其實答案就藏在?U-Boot?構(gòu)建過程中自動生成的U-Boot.map文件里!這篇文章帶你從零吃透這個
    的頭像 發(fā)表于 04-27 07:11 ?516次閱讀
    吃透RK3576 U-Boot.<b class='flag-5'>map</b><b class='flag-5'>文件</b>!嵌入式開發(fā)調(diào)試、性能優(yōu)化、代碼裁剪全攻略

    功率分析儀PW8001?調(diào)速電機的損耗分離和效率MAP圖制作

    電動汽車的電機需實現(xiàn)從低速到高速的高效輸出。因此,通過改變電機的轉(zhuǎn)速和扭矩,繪制可展示在不同參數(shù)條件下效率表現(xiàn)的效率 MAP 圖就極為重要。 在本應(yīng)用案例中,我們將為大家介紹基于永磁同步電機
    的頭像 發(fā)表于 04-17 18:20 ?112次閱讀
    功率分析儀PW8001?調(diào)速電機的損耗分離和效率<b class='flag-5'>MAP</b>圖制作

    STM32L151xC和STM32L152xC微控制器:低功耗設(shè)計的理想之選

    L151xC和STM32L152xC系列微控制器憑借其卓越的性能和豐富的功能,成為了眾多應(yīng)用場景的理想選擇。本文將對這兩款微控制器進行詳細介紹,希望能為電子工程師們在設(shè)計過程中提供有價值的參考。 文件下載
    的頭像 發(fā)表于 04-17 14:45 ?173次閱讀

    如何在 STM32Cube CMake 工程中添加源文件

    STM32Cube for Visual Studio Code V3 版本(例如,如下圖所示的 Pre-release V3.4.11)打開,編輯,編譯以及調(diào)試。但是除了 STM32CubeMX 生成的文件,還有自己開發(fā)的源
    發(fā)表于 04-15 16:07 ?0次下載

    探索MAP80系列AC - DC電源:工業(yè)應(yīng)用的可靠之選

    MAP80系列AC - DC電源,看看它在工業(yè)應(yīng)用中能為我們帶來哪些優(yōu)勢。 文件下載: MAP80-4001.pdf 一、產(chǎn)品概述 MAP80系列專為需要高峰值電流能力的工業(yè)系統(tǒng)提供
    的頭像 發(fā)表于 04-05 13:50 ?642次閱讀

    探索Bel Power Solutions MAP110系列AC - DC電源:高性價比與多功能的完美結(jié)合

    Solutions的MAP110系列AC - DC電源,看看它如何以低成本和通用輸入的優(yōu)勢滿足工業(yè)需求。 文件下載: MAP110-S163.pdf 產(chǎn)品概述 MAP110系列電源是
    的頭像 發(fā)表于 04-05 13:40 ?667次閱讀

    STM32L151xC與STM32L152xC:超低功耗MCU的卓越之選

    。STMicroelectronics推出的STM32L151xC和STM32L152xC系列MCU,憑借其出色的超低功耗特性和豐富的功能,成為了眾多工程師的首選。今天,我們就來詳細剖析這兩款MCU的特點和優(yōu)勢。
    的頭像 發(fā)表于 03-11 16:30 ?329次閱讀

    LAT1574_如何在 STM32Cube CMake 工程中添加源文件

    STM32Cube for Visual Studio Code V3 版本(例如,如下圖所示的 Pre-release V3.4.11)打開,編輯,編譯以及調(diào)試。但是除了 STM32CubeMX 生成的文件,還有
    發(fā)表于 03-11 10:46 ?0次下載

    飛凌嵌入式ElfBoard-文件I/O的深入學(xué)習之存儲映射I/O

    標志之一:?MAP_SHARED:此標志指定當對映射區(qū)寫入數(shù)據(jù)時,數(shù)據(jù)會寫入到文件中,也就是會將寫入到映射區(qū)中的數(shù)據(jù)更新到文件中,并且允許其它進程共享。?MAP_PRIVATE:此標志
    發(fā)表于 12-06 16:39

    請問如何打開map文件

    如何打開map文件?
    發(fā)表于 11-28 07:17

    請問Keil中的map文件到底是什么意思?

    Keil中的map文件到底是什么意思?里面是如何進行相關(guān)執(zhí)行操作的
    發(fā)表于 11-25 06:59

    在Keil5中查看棧大小

    為需要的大小,然后保存并重新編譯工程,新的棧大小即可生效。 2、查看.map文件: 方法說明:在Keil MDK中編譯工程后,會生成一個.map文件,該
    發(fā)表于 11-14 06:32

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

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

    使用USB轉(zhuǎn)TTL串口板和ST-LINK調(diào)試下載器給STM32單片機下載程序

    本文詳細介紹如何使用ST-LINK/V2和USB轉(zhuǎn)TTL串口板為STM32單片機下載程序,包括STM32啟動模式、JTAG與SWD接口對比、驅(qū)動安裝及官方軟件STM32ST-LINKU
    的頭像 發(fā)表于 06-20 17:26 ?3328次閱讀
    使用USB轉(zhuǎn)TTL串口板和ST-LINK調(diào)試下載器給<b class='flag-5'>STM32</b>單片機下載程序

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

    情況。u-boot.map中包含了鏈接過程中涉及到的目標文件以及其所依賴的庫文件中的各個符號的地址信息,以及我們所涉及到的函數(shù)所在目錄信息,這里不再展開講,有興趣的同學(xué)可以自己查看研究。
    發(fā)表于 05-22 11:22
    荔浦县| 孟州市| 合肥市| 盈江县| 明光市| 池州市| 黄梅县| 西林县| 望谟县| 平阴县| 射阳县| 阿拉善右旗| 勐海县| 惠水县| 靖江市| 安远县| 建昌县| 新源县| 额济纳旗| 武胜县| 广平县| 广州市| 恩施市| 本溪市| 海丰县| 天峨县| 运城市| 无锡市| 措美县| 武胜县| 桂林市| 平和县| 玉环县| 灵璧县| 仪征市| 礼泉县| 怀仁县| 南汇区| 东海县| 柞水县| 万载县|