91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

IAR分析內(nèi)存重要的神器 - map文件全解析

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

掃碼添加小助手

加入工程師交流群

對于使用RTOS進(jìn)行項(xiàng)目開發(fā)的朋友可能會有這樣的疑惑,我創(chuàng)建的任務(wù)到底需要多大的堆棧空間才夠呢?

其實(shí),除了使用RTOS開發(fā),就是使用裸機(jī)進(jìn)行開發(fā)的朋友同樣也會遇到類似的問題,有些地方需要很大的堆棧,對系統(tǒng)堆棧的分配就有必要知道其大小,如果分配不充分,很有可能導(dǎo)致內(nèi)存溢出。

之前就有小伙伴問:我的代碼經(jīng)常運(yùn)行到“HardFault_Handler”、 “MemManage_Handler”異常中斷里面去了,是什么原因?qū)е碌哪兀?/p>

當(dāng)我們遇到內(nèi)存溢出現(xiàn)象時,查看map文件,很快就能找到那些代碼占用了多少空間。

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

輸出map配置

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

當(dāng)按照上面配置勾選了“生產(chǎn)map”文件,就可以看到如下情況:

下面才是重點(diǎn),就讓我給大家詳細(xì)講述一下IAR中map文件的重要內(nèi)容。map文件主要分為六大塊,詳情見下面章節(jié)。

Ⅰ、MAIN INIF

Ⅱ、RUNTIME MODEL ATTRIBUTES

Ⅲ、PLACEMENT SUMMARY

Ⅳ、INIT TABLE

Ⅴ、MODULE SUMMARY

Ⅵ、ENTRY LIST

MAIN INIF主要信息

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

RUNTIME MODEL ATTRIBUTES

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

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區(qū)域,類型為ro;

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

2.詳細(xì)說明

Section Kind Address Size Object

段 類型 地址 大小 目標(biāo)位置

"A0": 0xec

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

- 0x080000ec 0xec

意思是:

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

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

startup_stm32f10x_md文件;

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

提示:

段與類型一般有對應(yīng)關(guān)系

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數(shù)據(jù))

"P2":

.data inited(已初始化數(shù)據(jù))

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

INIT TABLE

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

MODULE SUMMARY

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

ENTRY LIST

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

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

函數(shù):全局函數(shù)、靜態(tài)函數(shù)

變量:全局變量、(文件內(nèi))靜態(tài)變量、(函數(shù)內(nèi))靜態(tài)變量

入口 地址 大小 類型 目標(biāo)

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.“全局”函數(shù)

入口:main,為全局函數(shù)接口;

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

大?。?x5e,該入口函數(shù)大小為0x5e;

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

目標(biāo):main.o,該入口函數(shù)位于main.c文件下面。

2.“靜態(tài)”函數(shù)

靜態(tài)函數(shù)也就是在函數(shù)前加“static”.

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

類型為Code Lc,即靜態(tài)(局部Local)函數(shù);

3.全局變量

全局變量也叫“全局?jǐn)?shù)據(jù)”,因?yàn)樗念愋蜑椤癉ata Gb”。

從地址0x20000000可以看得出,它是位于RAM區(qū)域,也就是內(nèi)存中。

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

4.(文件內(nèi))靜態(tài)變量

使用static關(guān)鍵字定義的變量,只有在當(dāng)前文件內(nèi)使用,所以它屬于靜態(tài)(“局部”Local)變量。

5.(函數(shù)內(nèi))靜態(tài)變量

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

從入口“main::sVar_I”可以看得出,變量sVar_I定義在main函數(shù)體內(nèi)。

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

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

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

    關(guān)注

    9

    文章

    3209

    瀏覽量

    76352
  • IAR
    IAR
    +關(guān)注

    關(guān)注

    5

    文章

    409

    瀏覽量

    38535
  • RTOS
    +關(guān)注

    關(guān)注

    25

    文章

    866

    瀏覽量

    122963
  • MAP
    MAP
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Renesas RX64M/RX71M 系列閃存內(nèi)存硬件接口深度解析

    Renesas RX64M/RX71M 系列閃存內(nèi)存硬件接口深度解析 引言 在嵌入式系統(tǒng)設(shè)計中,閃存內(nèi)存的高效使用和管理至關(guān)重要。Renesas 的 RX64M 和 RX71M 系列微
    的頭像 發(fā)表于 03-02 16:50 ?106次閱讀

    深入解析Cypress FM18W08 F-RAM內(nèi)存:特性、功能與設(shè)計要點(diǎn)

    深入解析Cypress FM18W08 F-RAM內(nèi)存:特性、功能與設(shè)計要點(diǎn) 在電子設(shè)計領(lǐng)域,選擇合適的內(nèi)存對于系統(tǒng)的性能和可靠性至關(guān)重要。Cypress的FM18W08 256 -
    的頭像 發(fā)表于 02-05 15:20 ?143次閱讀

    內(nèi)存暴漲缺貨?志T536開發(fā)板靈活存儲救場,現(xiàn)貨秒發(fā)不卡殼

    誰還在為內(nèi)存缺貨、DDR4溢價頭疼?嵌入式研發(fā)黨集合!當(dāng)下內(nèi)存緊缺潮來襲,不少項(xiàng)目被供貨卡脖子、被成本壓得喘不過氣。合眾恒躍直接帶著志T536工業(yè)級開發(fā)板破局——多元內(nèi)存按需選配不浪
    的頭像 發(fā)表于 01-26 10:50 ?650次閱讀
    <b class='flag-5'>內(nèi)存</b>暴漲缺貨?<b class='flag-5'>全</b>志T536開發(fā)板靈活存儲救場,現(xiàn)貨秒發(fā)不卡殼

    SEMPER? Nano S25FS256T 內(nèi)存模塊快速上手與特性解析

    SEMPER? Nano S25FS256T 內(nèi)存模塊快速上手與特性解析 在電子工程師們的日常工作中,選擇一款合適的內(nèi)存模塊至關(guān)重要。今天就來和大家分享一下英飛凌(Infineon)推
    的頭像 發(fā)表于 12-20 15:50 ?1158次閱讀

    Labview 解析dxf文件并顯示

    上一期開了一個帖子講Labview導(dǎo)入dxf文件解析和顯示dxf文件,今天繼續(xù)繼續(xù)分享常用圖元的解析與顯示方法。 LINE :用文本方式打開dxf
    發(fā)表于 12-01 11:28

    請問如何打開map文件?

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

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

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

    Labview 解析dxf文件并顯示<一>

    Labview軟件開發(fā)過程中,大家會遇到導(dǎo)入dxf文件的需要,今天開個帖子,聊聊如何解析和顯示dxf文件,同時用圖表來顯示。 首先來介紹下dxf, 簡單來說他就是圖形文件的一種文本格式
    發(fā)表于 11-14 22:45

    AT組件無法正確解析bin文件怎么解決?

    通過ESP32接受網(wǎng)絡(luò)數(shù)據(jù),然后寫入MCU中,但是發(fā)現(xiàn)在解析bin文件的時候,會自動添加字符。應(yīng)該是換行符號的解析出現(xiàn)了問題。有什么好辦法嗎?
    發(fā)表于 09-28 08:36

    文件系統(tǒng),使用iar編譯報錯,gcc可以正常編譯,為什么?

    文件系統(tǒng),使用iar編譯報錯,gcc可以正常編譯,為什么?
    發(fā)表于 09-23 06:54

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

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

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

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

    基于 IAR Embedded Workbench 的自研 MCU 芯片軟件函數(shù)與變量內(nèi)存布局優(yōu)化精控方法

    在嵌入式軟件開發(fā)領(lǐng)域,MCU芯片軟件的架構(gòu)設(shè)計與內(nèi)存布局的精細(xì)規(guī)劃對系統(tǒng)性能和穩(wěn)定性起著關(guān)鍵作用。本文檔聚焦于IAR Embedded Workbench環(huán)境下,為自研MCU芯片軟件提供了一套詳盡
    的頭像 發(fā)表于 04-30 16:38 ?760次閱讀
    基于 <b class='flag-5'>IAR</b> Embedded Workbench 的自研 MCU 芯片軟件函數(shù)與變量<b class='flag-5'>內(nèi)存</b>布局優(yōu)化精控方法

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

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

    IAR無法跳轉(zhuǎn)定義,系統(tǒng)庫文件文件名后有[RO]是怎么回事?

    IAR無法跳轉(zhuǎn)定義,系統(tǒng)庫文件文件名后有[RO]
    發(fā)表于 03-10 07:36