色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    3019

    瀏覽量

    74005
  • IAR
    IAR
    +關注

    關注

    5

    文章

    350

    瀏覽量

    36665
  • RTOS
    +關注

    關注

    22

    文章

    811

    瀏覽量

    119595
  • MAP
    MAP
    +關注

    關注

    0

    文章

    49

    瀏覽量

    15137
收藏 人收藏

    評論

    相關推薦

    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 ?164次閱讀
    如何獲取入口函數不是__<b class='flag-5'>iar</b>_program_start的Program entry的stack使用情況

    HBM與GDDR內存技術解析

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

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

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

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

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

    什么是內存通道技術

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

    內存時鐘是什么意思

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

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

    是0x8000000~0x800ffff,大小為64k,IAR上的icf文件設置地址也是正確,map文件中程序寫到地址0x800\'449c,剩余0xbb64
    發表于 07-26 08:30

    內存的種類都有哪些?有什么區別?

    內存,作為計算機中不可或缺的組成部分,承擔著存儲和交換數據的重要任務。隨著技術的不斷發展,內存的種類也日益豐富,每種類型都有其獨特的特點和適用場景。以下是對內存種類及其區別的詳細
    的頭像 發表于 07-15 18:15 ?1.1w次閱讀

    示波器文件存儲方式介紹

    示波器作為電子測試領域的重要工具,其功能不僅限于實時顯示和分析電信號波形,還涉及到數據的存儲和導出。隨著技術的發展,示波器提供了多種文件存儲方式,以滿足不同應用場景下的數據保存需求。本文將詳細
    的頭像 發表于 05-29 17:08 ?1140次閱讀

    求助,關于STM8S IAR寫程序內存的問題求解

    這是IAR編譯之后的代碼大小,在網上查了一下,對這三個的存儲地址眾說紛紜,一致的說法是內存大小等于這三個相加,所以向各位前輩請教這三個的儲存地址和程序的總大小,因為用的STM8S003內存只有8K
    發表于 05-22 08:21

    stvd無法生成map文件怎么解決?

    用stvd 4.3.12,為什么我新建的工程生活生成不了map文件(已經在project setting->linker->ouput里選擇了General Map
    發表于 04-29 09:01

    IAR FOR ARM和IAR FOR STM8無法共存怎么解決?

    Files (x86)IAR SystemsEmbedded Workbench 8.1文件夾里 安裝完后,FOR STM8在C:Program Files (x86)IAR
    發表于 04-07 07:39

    如何查看GD32 Keil和IAR工程的map文件

    ,文件會有很多信息,比如函數地址及所占空間大小、變量地址及所占用空間大小、棧頂指針、整個工程所占用的flash和RAM空間大小等等。在進行代碼分析時,map文件
    的頭像 發表于 01-27 09:30 ?2597次閱讀
    如何查看GD32 Keil和<b class='flag-5'>IAR</b>工程的<b class='flag-5'>map</b><b class='flag-5'>文件</b>
    主站蜘蛛池模板: 青青草原直播| 国产福利视频第一导航| 午夜国产精品视频| 91交换论坛| 娇妻归来在线观看免费完整版电影| 亚洲成人欧美| 精品一区二区三区免费观看| 中国女人精69xxxxxx视频| 麻豆乱码一卡二卡三卡视频| AV72啪啪网站| 你是淫荡的我的女王| 一本道mw高清码二区三区| 久在线观看福利视频| chinese情侣自拍啪hd| 上原结衣快播| 国产呦精品一区二区三区下载| 色婷婷狠狠97成为人免费| 国产成人免费观看在线视频| 校花爽好大快深点h| 久久久久国产一级毛片高清片| 99精品热视频30在线热视频 | 电影日本妻子| 新影音先锋男人色资源网| 久久精品综合电影| av av在线| 性一交一乱一色一视频| 久久久视频2019午夜福利| 99视频在线国产| 午夜射精日本三级| 久久久高清国产999尤物| yellow日本动漫高清| 小xav导航| 美女pk精子4| 国产成人 免费观看| 亚洲在线国产日韩欧美| 欧美男女爱爱| 国产在线不卡| 99热精品一区| 亚洲aaaa级特黄毛片| 免费精品国产人妻国语麻豆| 国产国产人免费观看在线视频|