91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

3天內不再提示

IAR分析內存重要的神器 - map文件全解析

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-14 14:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

對于使用RTOS進行項目開發的朋友可能會有這樣的疑惑,我創建的任務到底需要多大的堆棧空間才夠呢?

其實,除了使用RTOS開發,就是使用裸機進行開發的朋友同樣也會遇到類似的問題,有些地方需要很大的堆棧,對系統堆棧的分配就有必要知道其大小,如果分配不充分,很有可能導致內存溢出。

之前就有小伙伴問:我的代碼經常運行到“HardFault_Handler”、 “MemManage_Handler”異常中斷里面去了,是什么原因導致的呢?

當我們遇到內存溢出現象時,查看map文件,很快就能找到那些代碼占用了多少空間。

還有很多小伙伴問:我代碼、內存占用的資源如何查看呢?當你們了解了map文件里面的內容,以上問題就一目了然了。

輸出map配置

在工程中,默認是輸出了map文件,如果沒有輸出,需要如下配置:

當按照上面配置勾選了“生產map”文件,就可以看到如下情況:

下面才是重點,就讓我給大家詳細講述一下IAR中map文件的重要內容。map文件主要分為六大塊,詳情見下面章節。

Ⅰ、MAIN INIF

Ⅱ、RUNTIME MODEL ATTRIBUTES

Ⅲ、PLACEMENT SUMMARY

Ⅳ、INIT TABLE

Ⅴ、MODULE SUMMARY

Ⅵ、ENTRY LIST

MAIN INIF主要信息

這段信息比較簡單,關于map文件的主要信息。包含:IAR版本、日期、輸出文件路徑、map文件路徑等。

RUNTIME MODEL ATTRIBUTES

RUNTIME MODEL ATTRIBUTES:運行時MODEL屬性。這部分顯示相關屬性等信息,可以不用深入理解。

PLACEMENT SUMMARY

PLACEMENT SUMMARY:概述位置,即各Section(段)存儲的位置。

1.總體概述

"A0": place at 0x08000000 { ro section .intvec };

"P1": place in [from 0x08000000 to 0x0801ffff] { ro };

"P2": place in [from 0x20000000 to 0x20004fff] { rw, block CSTACK, block HEAP };

意思是:

"A0"段位于0x08000000,類型為intvec(初始化向量);

"P1"段位于0x08000000 至 0x0801ffff區域,類型為ro;

"P2"段位于0x20000000 至0x20004fff區域,類型包含:rw, block CSTACK, block HEAP;

2.詳細說明

Section Kind Address Size Object

段 類型 地址 大小 目標位置

"A0": 0xec

.intvec ro code 0x08000000 0xec startup_stm32f10x_md.o [1]

- 0x080000ec 0xec

意思是:

"A0"段總共大小為0xec;

其中“.intvec”段類型為ro,地址0x08000000,大小0xec,位于

startup_stm32f10x_md文件;

"A0"段結束地址為0x080000ec,總共大小0xec。

提示:

段與類型一般有對應關系

Section Kind

"A1":

.intvec ro code(ro代碼)

"P1":

.text ro code(ro代碼)

.rodata const (常量)

CODE ro code(ro代碼)

.iar.init_table const(常量)

Initializer bytes ro data(ro數據)

"P2":

.data inited(已初始化數據)

.bss zero(未初始化數據 零)

INIT TABLE

INIT TABLE:初始化表,類似于上面第三部分內容,這里是針對RAM存儲地址。

MODULE SUMMARY

MODULE SUMMARY:概述模塊,主要概述文件于庫(模塊)所占ro代碼大小、rw數據大小。

ENTRY LIST

ENTRY LIST:入口列表,包含函數、變量等入口地址。

其中Entry(入口)主要包含兩大類:函數和變量。

函數:全局函數、靜態函數

變量:全局變量、(文件內)靜態變量、(函數內)靜態變量

入口 地址 大小 類型 目標

Entry Address Size Type Object

main 0x08000317 0x5e Code Gb main.o [1]

SetSysClock 0x08000141 0x8 Code Lc system_stm32f10x.o

gVar 0x20000000 0x4 Data Gb main.o [1]

sVar_E 0x20000004 0x4 Data Lc main.o [1]

main::sVar_I 0x20000008 0x4 Data Lc main.o [1]

從上面列表的差異可以看到出來主要包含五類:

1.“全局”函數

入口:main,為全局函數接口;

地址:0x08000317,代表存儲在FLASH;

大小:0x5e,該入口函數大小為0x5e;

類型:Code Gb,其中code說明為代碼,Gb說明為“全局的”函數(Global);

目標:main.o,該入口函數位于main.c文件下面。

2.“靜態”函數

靜態函數也就是在函數前加“static”.

SetSysClock位于system_stm32f10x.c文件下,可以看到前面加了“static”。

類型為Code Lc,即靜態(局部Local)函數;

3.全局變量

全局變量也叫“全局數據”,因為它的類型為“Data Gb”。

從地址0x20000000可以看得出,它是位于RAM區域,也就是內存中。

(提示:只有全局和靜態的變量才會在編譯之后決定在RAM中的地址,定義在函數體里面的局部變量只有在程序運行時才會分配地址,也就是說局部變量位于堆棧中)。

4.(文件內)靜態變量

使用static關鍵字定義的變量,只有在當前文件內使用,所以它屬于靜態(“局部”Local)變量。

5.(函數內)靜態變量

它和“(文件內)靜態變量”類似,屬于靜態變量,只是它定義在函數體內的。

從入口“main::sVar_I”可以看得出,變量sVar_I定義在main函數體內。

map文件的最后有如下一段信息:

[1] = C:\Users\Administer\Desktop\Demo\Debug\Obj

[2] = command line

[3] = dl7M_tln.a

[4] = m7M_tls.a

[5] = rt7M_tl.a

[6] = shb_l.a

130 157 bytes of readonly code memory

18 736 bytes of readonly data memory

121 508 bytes of readwrite data memory

Errors: none

Warnings: none

相信大家都會明白,信息就是所有代碼、內存塊匯總的。而這條信息也會在編譯窗口中顯示出來。

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

    關注

    8

    文章

    3125

    瀏覽量

    75287
  • IAR
    IAR
    +關注

    關注

    5

    文章

    382

    瀏覽量

    37483
  • RTOS
    +關注

    關注

    24

    文章

    851

    瀏覽量

    121202
  • MAP
    MAP
    +關注

    關注

    0

    文章

    49

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    但沒定義的符號)信息。符號值:每個符號對應一個內存地址, 即符號值。符號類型:常見的有B(bss),D(data),T或t(text),當然還有其他不常見類型,這里不一一列舉。打開system.map
    發表于 05-22 11:22

    屋燈光秒變聰明,這個提升幸福感的神器你還沒安排嗎?

    屋燈光秒變聰明這個提升幸福感的神器你還沒安排嗎?我寶子們,你是否受夠了摸黑找開關的狼狽、手動調光的繁瑣,或是永遠調不出理想氛圍的無奈?作為專注智能燈控方案的我們,今天就來揭秘——如何讓家里的燈光
    的頭像 發表于 05-14 18:15 ?312次閱讀
    <b class='flag-5'>全</b>屋燈光秒變聰明,這個提升幸福感的<b class='flag-5'>神器</b>你還沒安排嗎?

    基于 IAR Embedded Workbench 的自研 MCU 芯片軟件函數與變量內存布局優化精控方法

    在嵌入式軟件開發領域,MCU芯片軟件的架構設計與內存布局的精細規劃對系統性能和穩定性起著關鍵作用。本文檔聚焦于IAR Embedded Workbench環境下,為自研MCU芯片軟件提供了一套詳盡
    的頭像 發表于 04-30 16:38 ?293次閱讀
    基于 <b class='flag-5'>IAR</b> Embedded Workbench 的自研 MCU 芯片軟件函數與變量<b class='flag-5'>內存</b>布局優化精控方法

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

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

    IAR無法跳轉定義,系統庫文件文件名后有[RO]是怎么回事?

    IAR無法跳轉定義,系統庫文件文件名后有[RO]
    發表于 03-10 07:36

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

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

    如何獲取入口函數不是__iar_program_start的Program entry的stack使用情況

    問題 IAR中默認的入口函數是__iar_program_start,使能stack usage analysis之后: 生成的map文件中STACK USAGE章節里面會包含Prog
    的頭像 發表于 11-25 16:23 ?1064次閱讀
    如何獲取入口函數不是__<b class='flag-5'>iar</b>_program_start的Program entry的stack使用情況

    HBM與GDDR內存技術解析

    在高性能圖形處理領域,內存技術起著至關重要的作用。本文介紹兩種主要的圖形內存技術:高帶寬內存(HBM)和圖形雙倍數據速率(GDDR),它們在架構、性能特性和應用場景上各有千秋。通過對比
    的頭像 發表于 11-15 10:47 ?3296次閱讀
    HBM與GDDR<b class='flag-5'>內存</b>技術<b class='flag-5'>全</b><b class='flag-5'>解析</b>

    深入解析Tricore的Tasking鏈接文件

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

    CAN底層報文抓到了,卻不知怎么解析?以及如何看到信號運行狀態?

    本文介紹CAN總線中DBC文件重要性及ZCANPRO如何實現DBC解析、數據發送和實時曲線分析,幫助您更有效地分析和利用CAN總線數據。在
    的頭像 發表于 09-30 08:05 ?2679次閱讀
    CAN底層報文抓到了,卻不知怎么<b class='flag-5'>解析</b>?以及如何看到信號運行狀態?

    PCBA加工流程解析:電子制造的關鍵環節

    成成品產品的重要任務。本文將詳細介紹PCBA加工的流程,從設計到成品,逐步解析每個環節的工藝和關鍵步驟。 PCBA加工電子制造的關鍵環節流程解析
    的頭像 發表于 09-18 09:51 ?1274次閱讀

    內存的分類有哪些

    內存作為計算機系統中至關重要的組成部分,其分類可以從多個維度進行闡述。以下將從主要類型、技術特性、應用場景等多個方面詳細介紹內存的分類,力求全面且深入地解析這一話題。
    的頭像 發表于 09-10 14:20 ?2845次閱讀

    什么是內存通道技術

    內存通道技術作為計算機系統中的核心組成部分,對于提升數據處理能力、優化系統性能以及增強系統的穩定性與擴展性等方面發揮著至關重要的作用。以下是對內存通道技術作用的詳細闡述,旨在通過多個方面解析
    的頭像 發表于 09-04 12:47 ?1616次閱讀

    內存時鐘是什么意思

    內存時鐘是內存模塊中一個至關重要的參數,它直接關聯到內存模塊能夠工作的最高頻率。以下是對內存時鐘的詳細
    的頭像 發表于 09-04 11:45 ?2411次閱讀

    使用GD32E230X8通過IAR仿真出現outside FLASH問題怎么解決?

    是0x8000000~0x800ffff,大小為64k,IAR上的icf文件設置地址也是正確,map文件中程序寫到地址0x800\'449c,剩余0xbb64
    發表于 07-26 08:30
    主站蜘蛛池模板: 绝色村妇的泛滥春情 | 激情五月亚洲 | 琪琪午夜伦埋大全影院 | 亚洲色图国产精品 | 黄色大片播放 | 天天射综合 | 日日日干干干 | 亚洲综合精品香蕉久久网97 | 国产精品福利一区 | 网站毛片 | 天天干精品 | 四虎影院永久在线 | 天堂综合网 | 4hc44四虎www视频 | 成人小视频在线 | 黄色国产视频 | 国产精品午夜自在在线精品 | 天天色天天色 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 激情六月天婷婷 | 91热成人精品国产免费 | 男女交性视频免费视频 | 成熟女人免费一级毛片 | 亚洲 欧美 校园 | 成人性色生活影片 | 日本毛片大全 | 99热.com| bt在线天堂| 青青热久免费精品视频在线观看 | 欧美三级不卡在线观线看高清 | 新天堂在线 | 国模私拍视频在线 | 精品国产午夜久久久久九九 | 天天干干天天 | 曰本女人色黄网站 | 欧洲乱码专区一区二区三区四区 | 亚洲区免费 | 天天操天天干天天摸 | 白丝丝袜高跟国产在线视频 | 色综合中文网 | 五月婷婷六月合 |