国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    1749

    瀏覽量

    155560
  • STM32
    +關注

    關注

    2310

    文章

    11164

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

    請問如何打開map文件

    如何打開map文件
    發表于 11-28 07:17

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

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

    在Keil5中查看棧大小

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

    STM32CubeIDE報錯編譯STM32MP135(Projects\\STM32MP135C-DK\\External_Loader)的原因?

    ;objects.list\"-mcpu=cortex-a7 -T\"../stm32mp13xx_a7_sysram.ld\" --specs=nosys.specs -Wl,-Map
    發表于 07-11 06:19

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

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

    使用USB轉TTL串口板和ST-LINK調試下載器給STM32單片機下載程序

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

    STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊

    電子發燒友網站提供《STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊.pdf》資料免費下載
    發表于 06-06 17:06 ?17次下載

    飛凌嵌入式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 ?2次下載

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

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

    MAP氣調包裝頂空氣體檢測技術中會用到哪些傳感器?

    食品、飲料和其他易腐產品在運輸和儲存過程中,可能會受到氧化反應、微生物污染和水分流失等因素的影響,導致質量下降和保質期縮短。為了克服這些挑戰,氣調包裝(MAP)?技術被廣泛應用于食品行業,尤其是在
    的頭像 發表于 04-02 17:47 ?616次閱讀
    <b class='flag-5'>MAP</b>氣調包裝頂空氣體檢測技術中會用到哪些傳感器?

    STM32CubeMX生成代碼就會覆蓋CMakeLists.txt文件,怎么解決?

    請教一下用STM32CubeMX生成代碼后,我自己加了一個頭文件和源文件,這些自己加的文件不是要配置到CMakeLists.txt編譯么,但下載在用
    發表于 03-12 08:03

    STM32CubeMX無法打開.ioc文件怎么解決?

    我的STM32CubeMX不能打開別人的工程文件,雙擊打開.ioc文件后會全白,只剩左上角有個home,什么也點不了,但是我自己可以創建工程,也可以打開我自己創建的工程。請問我該如何解決
    發表于 03-12 07:39