1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      STM32的map文件怎么生成

      本篇內(nèi)容主要講解“STM32的map文件怎么生成”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“STM32的map文件怎么生成”吧!

      10年積累的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有西寧免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

      前言

      前幾個(gè)月針對(duì)公司自己的芯片寫了個(gè)程序,這個(gè)程序有個(gè)硬性要求,就是能用的FLASH空間只有4KB,之前已經(jīng)寫得差不多了,最終占用空間3.6KB。

      這不,最近又得加需求,還剩一點(diǎn)點(diǎn)FLASH空間可以使用,這該如何是好。需求已經(jīng)加過來了,不行也得行啊。所以就得去優(yōu)化之前的代碼了,這就得研究比較底層的東西了。

      我們的芯片與其它的MCU芯片用起來都差不多一樣。我們?cè)谟肧T的時(shí)候,編譯完成,會(huì)生成很多文件,其中有一個(gè).map文件,里面包含的信息就是工程 ROM/FLASH 和 RAM 的占用情況 。

      之前只是關(guān)心.map文件的最后幾行的 ROM/FLASH占用信息,如:

      STM32的map文件怎么生成

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

       

      map文件

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

      STM32的map文件怎么生成

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

      STM32的map文件怎么生成

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

      1、節(jié)區(qū)的跨文件引用(Section Cross References)
      2、刪除無用節(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、映像組件大小(Image component sizes)
       

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

      STM32的map文件怎么生成

      這部分主要是不同文件中函數(shù)的調(diào)用關(guān)系。 在這部分中,詳細(xì)列出了各個(gè).o 文件之間的符號(hào)引用。

      由于.o 文件是由 asm 或 c/c++源文件編譯后生成的,各個(gè)文件及文件內(nèi)的節(jié)區(qū)間互相獨(dú)立,鏈接器根據(jù)它們之間的互相引用鏈接起來,鏈接的詳細(xì)信息在這個(gè)Section Cross References一一列出。

      例如,開頭部分說明的是 startup_stm32f429_439xx.o 文件中的“RESET”節(jié)區(qū)分為它使用的__initial_sp符號(hào)引用了同文件“STACK”節(jié)區(qū)。

      也許我們對(duì)啟動(dòng)文件不熟悉,不清楚這究竟是什么,那我們繼續(xù)瀏覽,可看到 main.o文件的引用說明,如說明 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)” 這樣的提示,該提示的原因就是在鏈接過程中,某個(gè)文件無法在外部找到它引用的標(biāo)號(hào),因而產(chǎn)生鏈接錯(cuò)誤。

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

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

      STM32的map文件怎么生成

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

      例如,上面的信息中說明 startup_stm32f429_439xx.o 中的 HEAP(在啟動(dòng)文件中定義的用于動(dòng)態(tài)分配的“堆”區(qū))以及 stm32f4xx_adc.o 的各個(gè)節(jié)區(qū)都被刪除了,因?yàn)樵谖覀冞@個(gè)工程中沒有使用動(dòng)態(tài)內(nè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文件怎么生成

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

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

      STM32的map文件怎么生成

      這個(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文件怎么生成

      映像文件可以分為加載域(Load Region)和運(yùn)行域(Execution Region) 。

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

      STM32的map文件怎么生成

      通過上面的框圖可以看出,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ū)(棧空間)存儲(chǔ)在 SRAM 的 0x20000000 地址,大小為 0x00000400,類型為 Zero,屬性為RW(即 RW-data) 。

      5、映像組件大小

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

      STM32的map文件怎么生成

      這部分包含了各個(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é)的空間。

      到此,相信大家對(duì)“STM32的map文件怎么生成”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


      本文題目:STM32的map文件怎么生成
      本文URL:http://ef60e0e.cn/article/peegph.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        宜黄县| 广南县| 沙坪坝区| 永州市| 右玉县| 饶平县| 荃湾区| 八宿县| 宜君县| 孝感市| 南岸区| 玉溪市| 漳浦县| 曲靖市| 新干县| 稷山县| 腾冲县| 台州市| 呼玛县| 阜城县| 南昌市| 宁海县| 防城港市| 佛山市| 奎屯市| 蒙城县| 上蔡县| 兴海县| 公安县| 绥棱县| 包头市| 章丘市| 丁青县| 榆社县| 志丹县| 五河县| 沈丘县| 普定县| 岐山县| 肥东县| 岳阳县|