apollo系列之apollo2 mcu开发(基础篇)之1.3-解析编译生成的IAR中的map文件

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: apollo系列之apollo2 mcu开发(基础篇)之1.3-解析编译生成的IAR中的map文件

一、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)

*******************************************************************************
*** RUNTIME MODEL ATTRIBUTES
***
CppFlavor       = *
__Heap_Handler  = DLMalloc
__SystemLibrary = DLib
__dlib_version  = 6


运行模型属性:__Heap_Handler用的是DLMalloc,__SystemLibrarys DLib,__dlib_version版本是6


三、堆选择(HEAP SELECTION)

*******************************************************************************
*** HEAP SELECTION
***
The advanced heap was selected because the application calls memory
allocation functions outside of system library functions, and there
are 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,类型ro
define 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   0x1000
Unused 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)

*******************************************************************************
*** INIT TABLE
***
          Address      Size
          -------      ----
Zero (__iar_zero_init3)
    1 destination range, total size 0x2d153:
          0x1000'02b0  0x2d153
Copy/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 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 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,全局变量


Flash = readonly code memory + readonly data memory

RAM = readwrite data memory


目录
相关文章
|
1天前
云解析分享文件
这座建筑结合了现代设计与和谐的自然景观。大面积的玻璃窗让居住者可以充分享受美景和阳光,同时保证了室内充足的自然光线。是体验宁静生活与自然之美的理想之地。图片展现了其优美的自然环境和现代建筑设计的完美融合。
17 6
云解析分享文件
|
6天前
|
JSON 前端开发 JavaScript
解析JSON文件
解析JSON文件
28 9
|
19天前
|
JavaScript 前端开发 API
探索移动应用的世界:从开发到操作系统的深入解析
【8月更文挑战第31天】本文将带你走进移动应用的世界,从开发到操作系统,深入探讨移动应用的开发过程、移动操作系统的工作原理以及它们之间的交互。我们将通过代码示例,让你更好地理解移动应用的开发和运行机制。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和知识。
|
19天前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
80 0
|
20天前
|
区块链 C# 存储
链动未来:WPF与区块链的创新融合——从智能合约到去中心化应用,全方位解析开发安全可靠DApp的最佳路径
【8月更文挑战第31天】本文以问答形式详细介绍了区块链技术的特点及其在Windows Presentation Foundation(WPF)中的集成方法。通过示例代码展示了如何选择合适的区块链平台、创建智能合约,并在WPF应用中与其交互,实现安全可靠的消息存储和检索功能。希望这能为WPF开发者提供区块链技术应用的参考与灵感。
35 0
|
20天前
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
55 0
|
20天前
|
C# 开发者 UED
WPF开发者必备秘籍:深度解析文件对话框使用技巧,打开与保存文件原来如此简单!
【8月更文挑战第31天】在WPF应用开发中,文件操作是常见需求。本文详细介绍了如何利用`Microsoft.Win32`命名空间下的`OpenFileDialog`和`SaveFileDialog`类来正确实现文件打开与保存功能。通过示例代码展示了如何设置文件过滤器、初始目录等属性,并使用对话框进行文件读写操作。正确使用文件对话框能显著提升用户体验,使应用更友好易用。
39 0
|
20天前
|
开发者 云计算 数据库
从桌面跃升至云端的华丽转身:深入解析如何运用WinForms与Azure的强大组合,解锁传统应用向现代化分布式系统演变的秘密,实现性能与安全性的双重飞跃——你不可不知的开发新模式
【8月更文挑战第31天】在数字化转型浪潮中,传统桌面应用面临新挑战。本文探讨如何融合Windows Forms(WinForms)与Microsoft Azure,助力应用向云端转型。通过Azure的虚拟机、容器及无服务器计算,可轻松解决性能瓶颈,满足全球用户需求。文中还提供了连接Azure数据库的示例代码,并介绍了集成Azure Storage和Functions的方法。尽管存在安全性、网络延迟及成本等问题,但合理设计架构可有效应对,帮助开发者构建高效可靠的现代应用。
15 0
|
20天前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
59 0
|
21天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件

热门文章

最新文章

推荐镜像

更多