IAR map文件分析

*******************************************************************************
*** PLACEMENT SUMMARY
***

"A0":  place at 0x08060000 { ro section .intvec };
"P1":  place in [from 0x08060000 to 0x080bffff] { ro };
"P2":  place in [from 0x20000000 to 0x20080000] { rw, block CSTACK, block HEAP };
initialize by copy { rw };

  Section                Kind        Address     Size  Object
  -------                ----        -------     ----  ------
"A0":                                           0x1ac
  .intvec                ro code  0x08060000    0x1ac  startup_gd32f450_470.o [1]
                                - 0x080601ac    0x1ac

"P1":                                         0x4a4c0
  .text                           0x080601ac  0x40d5c  <Block>
    .text                ro code  0x080601ac    0x168  BitUtil.o [1]
    .text                ro code  0x08060314     0x66  ABImemset.o [6]

......

"P2", part 1 of 3:                             0x2eb0
  P2-1                            0x20000000   0x2eb0  <Init block>
    .data                inited   0x20000000    0x104  cdc_acm_core.o [1]
    .data                inited   0x20000104     0x10  cdc_acm_core.o [1]
    .data                inited   0x20000114     0x30  cdc_acm_core.o [1]
    .data                inited   0x20000144     0x30  cdc_acm_core0.o [1]
    .data                inited   0x20000174     0x30  cdc_acm_core1.o [1]
    .data                inited   0x200001a4     0x30  cdc_acm_core2.o [1]
    .data                inited   0x200001d4     0x30  cdc_acm_core3.o [1]
    .data                inited   0x20000204     0x30  cdc_acm_core4.o [1]

......
	
"P2", part 2 of 3:                            0x5b1c0
  .iar.dynexit                    0x20002eb0    0x1bc  <Block>
    .iar.dynexit         uninit   0x20002eb0      0xc  cppinit.o [3]
    .iar.dynexit         uninit   0x20002ebc    0x1b0  <Block tail>
  CSTACK                          0x20003070   0x6000  <Block>
    CSTACK               uninit   0x20003070   0x6000  <Block tail>
  HEAP                            0x20009070  0x55000  <Block>
    HEAP                 uninit   0x20009070  0x55000  <Block tail>
                                - 0x2005e070  0x5b1c0	
......	
	
"P2", part 3 of 3:                            0x10a44
  .bss                   zero     0x2005e070   0x9d6c  drv_usart.o [1]
  .bss                   zero     0x20067ddc   0x1000  drv_fmc.o [1]
  .bss                   zero     0x20068ddc    0xc00  drv_usart.o [1]
  
......

[1] = E:\code\Aqua2\COU\BMU7.0_COU_0314-chenliang\APP\Main\Prj\EWARM\Debug\Obj
[2] = command line
[3] = dl7M_tlf.a
[4] = dlpp7M_tl_fc.a
[5] = m7M_tls.a
[6] = rt7M_tl.a
[7] = shb_l.a

  265 992 bytes of readonly  code memory
   38 756 bytes of readonly  data memory
  453 293 bytes of readwrite data memory

Errors: none
Warnings: 3  
	
	
0x10a44("P2", part 1 of 3:) + 0x5b1c0("P2", part 2 of 3: ) + 0x2eb0("P2", part 3 of 3:)	= 0x6EAB4(453 293 bytes of readwrite data memory)

MCU的地址空间

Flash地址空间

RAM地址空间

map文件分析

*******************************************************************************
*** PLACEMENT SUMMARY
***

"A0":  place at 0x08060000 { ro section .intvec };
"P1":  place in [from 0x08060000 to 0x080bffff] { ro };
"P2":  place in [from 0x20000000 to 0x20080000] { rw, block CSTACK, block HEAP };
initialize by copy { rw };

  Section                Kind        Address     Size  Object
  -------                ----        -------     ----  ------
"A0":                                           0x1ac
  .intvec                ro code  0x08060000    0x1ac  startup_gd32f450_470.o [1]
                                - 0x080601ac    0x1ac

"P1":                                         0x4b46e
  .text                           0x080601ac  0x41b1c  <Block>
    .text                ro code  0x080601ac    0x168  BitUtil.o [1]
    .text                ro code  0x08060314     0x66  ABImemset.o [6]

......


"P2", part 1 of 3:                             0x3399
  P2-1                            0x20000000   0x3399  <Init block>
    .data                inited   0x20000000    0x788  OaMap.o [1]
    .data                inited   0x20000788    0x104  cdc_acm_core.o [1]
    .data                inited   0x2000088c     0x10  cdc_acm_core.o [1]

......

"P2", part 2 of 3:                            0x5b1bc
  .iar.dynexit                    0x2000339c    0x1bc  <Block>
    .iar.dynexit         uninit   0x2000339c      0xc  cppinit.o [3]
    .iar.dynexit         uninit   0x200033a8    0x1b0  <Block tail>
  CSTACK                          0x20003558   0x2000  <Block>
    CSTACK               uninit   0x20003558   0x2000  <Block tail>
  HEAP                            0x20005558  0x59000  <Block>
    HEAP                 uninit   0x20005558  0x59000  <Block tail>
                                - 0x2005e558  0x5b1bc
......

"P2", part 3 of 3:                             0xfa98
  .bss                   zero     0x2005e558   0x9d6c  drv_usart.o [1]
  .bss                   zero     0x200682c4    0xc00  drv_usart.o [1]
  .bss                   zero     0x20068ec4    0x8ac  Trace.o [1]

"A0"

地址为0x08060000,属于前面的Flash地址范围,只读扇区,中断向量表

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

用例

  Section                Kind        Address     Size  Object
  -------                ----        -------     ----  ------
"A0":                                           0x1ac
  .intvec                ro code  0x08060000    0x1ac  startup_gd32f450_470.o [1]
                                - 0x080601ac    0x1ac

"P1"

地址为0x08060000~0x080bFFFF,属于前面的Flash地址范围,只读扇区,除中断向量表以为的flash空间

"P1":  place in [from 0x08060000 to 0x080bffff] { ro };

用例

Section                Kind        Address     Size  Object
-------                ----        -------     ----  ------

"P1":                                         0x4b46e
  .text                           0x080601ac  0x41b1c  <Block>
    .text                ro code  0x080601ac    0x168  BitUtil.o [1]
    .text                ro code  0x08060314     0x66  ABImemset.o [6]

"P2"

0x200000000~0x20080000属于RAM的地址空间,包括RW,栈、堆

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

"P2", part 1 of 3

初始化的全局或静态变量所占用的内存空间:0x3399 = 13209

    Section                Kind        Address     Size  Object
    -------                ----        -------     ----  ------

"P2", part 1 of 3:                             0x3399
  P2-1                            0x20000000   0x3399  <Init block>
    .data                inited   0x20000000    0x788  OaMap.o [1]
    .data                inited   0x20000788    0x104  cdc_acm_core.o [1]
    .data                inited   0x2000088c     0x10  cdc_acm_core.o [1]

"P2", part 2 of 3

预先通过IAR的配置申请的堆和栈占用空间,IAR配置见下图:0x5b1bc = 373180

    Section                Kind        Address     Size  Object
    -------                ----        -------     ----  ------

"P2", part 2 of 3:                            0x5b1bc
  .iar.dynexit                    0x2000339c    0x1bc  <Block>
    .iar.dynexit         uninit   0x2000339c      0xc  cppinit.o [3]
    .iar.dynexit         uninit   0x200033a8    0x1b0  <Block tail>
  CSTACK                          0x20003558   0x2000  <Block>
    CSTACK               uninit   0x20003558   0x2000  <Block tail>
  HEAP                            0x20005558  0x59000  <Block>
    HEAP                 uninit   0x20005558  0x59000  <Block tail>
                                - 0x2005e558  0x5b1bc

"P2", part 3 of 3

初始化的全局或静态变量所占用的内存空间:0xFA98 = 64152,

根据适用的内存排序,可以对占用内存大的文件进行优化,例如下面的drv_uart.o

"P2", part 3 of 3:                             0xfa98
  .bss                   zero     0x2005e558   0x9d6c  drv_usart.o [1]
  .bss                   zero     0x200682c4    0xc00  drv_usart.o [1]
  .bss                   zero     0x20068ec4    0x8ac  Trace.o [1]

内存统计

"P2", part 1 of 3 + "P2", part 2 of 3 + "P2", part 3 of 3 = 0x3399 + 0x5b1bc + 0xfa98 = 0x6DFED=450,541字节

所属位置地址范围使用空间
"P2", part 1 of 30x20000000~0x3399=13209
"P2", part 2 of 30x20003558~0x2005e5580x5B1BC=373,180
"P2", part 3 of 30x2005e558~0xFA98=64152
总量0x20000000~0x200800000521K

初始化表

*******************************************************************************
*** INIT TABLE
***

          Address     Size
          -------     ----
Zero (__iar_zero_init3)
    1 destination range, total size 0xfa97:
          0x2005e558  0xfa97

Copy/lz77 (__iar_lz77_init_single3)
    1 source range, total size 0xa13 (19% of destination):
          0x080aac07   0xa13
    1 destination range, total size 0x3399:
          0x20000000  0x3399

Extra (__iar_cstart_call_ctors)

STACK_USAGE

Max Use统计的最大堆位3744,预留空间,申请0x2000,即8192的栈深

*******************************************************************************
*** STACK USAGE
***

  Call Graph Root Category  Max Use  Total Use
  ------------------------  -------  ---------
  Program entry              1 360      1 360
  Uncalled function          3 744    146 560

MODULE SUMMARY

对每个文件进行汇总,包括源码只读大小,内存大小等

*******************************************************************************
*** MODULE SUMMARY
***

    Module                  ro code  ro data  rw data
    ------                  -------  -------  -------
E:\code\Prj\EWARM\Debug\Obj: [1]
    BitUtil.o                   360
    BufUtil.o                    84
    ComAPI.o                     76       20
    ComInfCfg.o                  40    1 164
    Comm.o                      628       46        4
    CommIf.o                    552      236
    CouDiagnosManage.o        7 950      846        4
    CrcUtil.o                   176      518       32
    DrvCtrlAPI.o                 36        4       20

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值