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

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

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

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

    關注

    9

    文章

    3209

    瀏覽量

    76357
  • IAR
    IAR
    +關注

    關注

    5

    文章

    410

    瀏覽量

    38539
  • RTOS
    +關注

    關注

    25

    文章

    866

    瀏覽量

    122975
  • MAP
    MAP
    +關注

    關注

    0

    文章

    49

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    德州儀器PTH系列DDR/QDR內存總線端接模塊解析

    德州儀器PTH系列DDR/QDR內存總線端接模塊解析 在電子設計領域,內存總線端接模塊對于確保DDR和QDR內存應用的穩定運行至關重要。德州
    的頭像 發表于 03-05 10:20 ?172次閱讀

    Renesas RX64M/RX71M 系列閃存內存硬件接口深度解析

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

    深入解析Cypress FM18W08 F-RAM內存:特性、功能與設計要點

    深入解析Cypress FM18W08 F-RAM內存:特性、功能與設計要點 在電子設計領域,選擇合適的內存對于系統的性能和可靠性至關重要。Cypress的FM18W08 256 -
    的頭像 發表于 02-05 15:20 ?147次閱讀

    內存暴漲缺貨?志T536開發板靈活存儲救場,現貨秒發不卡殼

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

    SEMPER? Nano S25FS256T 內存模塊快速上手與特性解析

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

    Labview 解析dxf文件并顯示

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

    請問如何打開map文件

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

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

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

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

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

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

    通過ESP32接受網絡數據,然后寫入MCU中,但是發現在解析bin文件的時候,會自動添加字符。應該是換行符號的解析出現了問題。有什么好辦法嗎?
    發表于 09-28 08:36

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

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

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

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

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

    在嵌入式軟件開發領域,MCU芯片軟件的架構設計與內存布局的精細規劃對系統性能和穩定性起著關鍵作用。本文檔聚焦于IAR Embedded Workbench環境下,為自研MCU芯片軟件提供了一套詳盡
    的頭像 發表于 04-30 16:38 ?761次閱讀
    基于 <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