*******************************************************************************
*** 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 3 | 0x20000000~ | 0x3399=13209 |
"P2", part 2 of 3 | 0x20003558~0x2005e558 | 0x5B1BC=373,180 |
"P2", part 3 of 3 | 0x2005e558~ | 0xFA98=64152 |
总量 | 0x20000000~0x200800000 | 521K |
初始化表
*******************************************************************************
*** 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