查看全部教程开发请点击:apollo系列汇总
查看本文全部文章请点击:apollo系列之apollo2 mcu开发(基础篇)之1.3-解析编译生成的IAR中的map文件
====================================================================
版权归作者所有,未经允许,请勿转载。
====================================================================
\iar\bin中有*.map文件
################################################################################# IAR ELF Linker V8.32.2.178/W32 for ARM 12/Jan/2021 16:24:56# Copyright 2007-2018 IAR Systems AB.## Output file = # ...\iar\bin\VoS_THF.out# Map file = # ...\iar\bin\VoS_THF.map# Command line = # ...################################################################################
主要是文件路径,IAR的版本信息等。
********************************************************************************** RUNTIME MODEL ATTRIBUTES***CppFlavor = *__Heap_Handler = DLMalloc__SystemLibrary = DLib__dlib_version = 6
运行模型属性:__Heap_Handler用的是DLMalloc,__SystemLibrarys DLib,__dlib_version版本是6
********************************************************************************** HEAP SELECTION***The advanced heap was selected because the application calls memoryallocation functions outside of system library functions, and thereare calls to deallocation functions in the application.
之所以选择高级堆,是因为应用程序在系统库函数之外调用内存分配函数,并且应用程序中有对回收分配函数的调用。
四、
********************************************************************************** PLACEMENT SUMMARY*** "A0": place at 0x0 { ro section .intvec };//A0段位于0,类型.intvec"P1": place in [from 0x0 to 0xf'ffff] { ro };//p1段位于0到0xfffff,类型rodefine block CSTACK with size = 1K, alignment = 8 { };//定义堆块1K,8字节对齐define block HEAP with size = 2K, alignment = 8 { };//定义栈2K,8字节对齐"P3": place in [from 0x0 to 0x0] | [from 0x1000'0000 to 0x1003'ffff] { rw, block CSTACK, block HEAP };do not initialize { section .noinit };initialize by copy { rw };No sections matched the following patterns: ro section application_specific_ro in "P2|P4" rw section application_specific_rw in "P2|P4" Section(段) Kind(种类) Address Size Object(编译后的对象) ------- ---- ------- ---- ------"A0": 0xc0 .intvec const 0x0 0xc0 startup_iar.o [1] - 0xc0 0xc0"P1": 0x50573 .rodata const 0xc0 0x21778 cnn.o [5]//常量 .rodata const 0x2'1838 0x213f8 cnn_stage2.o [5] .text ro code 0x4'2c30 0x22c0 am_hal_iom.o [6]//ro code 代码 .text ro code 0x4'4ef0 0x2 am_hal_debug.o [6] .text ro code 0x4'4ef2 0x3a zero_init3.o [9]。。。"P3", part 1 of 3: 0x2ae P3 s0 0x1000'0000 0x2ae <Init block> .data inited 0x1000'0000 0x134 am_hal_iom.o [6]//.data已经初始化数据。。。"P3", part 2 of 3: 0x2d154//.bss 未初始化数据 为0 .bss zero 0x1000'02b0 0x1803c am_audio_buffer.o [1] .bss zero 0x1001'82ec 0x10018 heap_4.o [1]。。。P3", part 3 of 3: 0x1000//未初始化 .noinit uninit 0x1002'd404 0x1000 startup_iar.o [1] - 0x1002'e404 0x1000Unused ranges://空闲范围 From To Size ---- -- ---- 0x5'0633 0xf'ffff 0xa'f9cd//flash空闲地址段 0x1000'02ae 0x1000'02af 0x2 0x1002'e404 0x1003'ffff 0x1'1bfc
总结: 1. Section(段) Kind(种类) Address(地址) Size(大小) Object(编译后的对象) 2..rodata:常量 3.text:代码段 4..bss:BSS段(bss segment)通常是指用来存放程序中未初始化的或者初始值为0的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。 5.noinit:未初始化部分 6..data:已初始化
********************************************************************************** INIT TABLE*** Address Size ------- ----Zero (__iar_zero_init3) 1 destination range, total size 0x2d153: 0x1000'02b0 0x2d153Copy/packbits (__iar_packbits_init3) 1 source range, total size 0xef (34% of destination): 0x5'0544 0xef 1 destination range, total size 0x2ae: 0x1000'0000 0x2ae
********************************************************************************** MODULE SUMMARY*** Module ro code ro data rw data ------ ------- ------- -------command line/config: ------------------------------------------------------------- Total: am_app_KWD_audio.o 248 328 am_app_KWD_board_setup.o 1 508 95 20 am_app_KWD_init.o 136 152 1 111 am_app_KWD_isr.o 352 1... ------------------------------------------------------------- Total: 12 460 450 173 255...----------------------------------------------------------------- Grand Total: 50 710 278 557 189 441
这部分主要描述文件库ro代码大小,ro rw数据大小。
********************************************************************************** ENTRY LIST***Entry Address Size Type Object----- ------- ---- ---- ------.iar.init_table$$Base 0x5'04b4 -- Gb - Linker created -.iar.init_table$$Limit 0x5'04e0 -- Gb - Linker created -?main 0x5'04e1 Code Gb cmain.o [9]GPIO_Init 0x4'a79f 0x288 Code Lc am_app_KWD_board_setup.o [1]。。。 50 710 bytes of readonly code memory//只读属性,代码内存,存储在flahs中 278 557 bytes of readonly data memory//只读变量内存,存储在flash中 189 441 bytes of readwrite data memory//可读可写变量内存
总结: 1.?main,全局函数入口,地址0x504e1,存储在flash中 2.Code Gb,代码段,全局函数 3.Code LC,局部函数 4.Data Lc,局部变量 5.Data Gb,全局变量
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。