• 通过Keil如何查看MCU的RAM与ROM使用情况


    概述

            在很多偏门MCU,还是使用keil进行开发,开发过程中能免会出现ram,rom不够问题,怎么查看呢?下面揭晓答案^_^。

    一、查看方式

    1)、编译后

    2)、通过map查看

    方法很简单,鼠标对准红色圈,双击即可。


    有时,双击不了,只要按照上图配置,此 .map文件一定会在本工程里面,如下所示:

     找到.map,拖拽到keil中打开,即可。通过此文件可以分析,对应各个部分使用情况与合理性,从而进行做相应的优化处理。

     Keil 生成的 Map 文件里面内容大致分为五大类(按照.map文件分类的顺序)如下所示:

    1.Section Cross References

    指的是各个源文件生成的模块、段(定义的入口)之间相互引用的关系,配置中需勾选上:Cross Reference,例如:

    startup_stm32f401xe.o(RESET) refers to stm32f4xx_it.o(i.NMI_Handler) for NMI_Handler

    上面表示 startup_stm32f401xe.o 文件中的 main 函数调用了 stm32f4xx_it文件中的 NMI_Handler函数

    2.Removing Unused input sections from the image

    移除未使用的模块,配置中需勾选上:Unused Sections Info,就是删除工程代码中,没有被调用的模块。最后面还有个统计信息,例如

    表明有294段没用使用,总的占17904字节

    3.Image Symbol Table

    映射符号表,配置中需勾选上:Symbols,从中可以看出符号名称,存储地址,存储大小,所在的目标文件

    4.Memory Map of the image

    内存映射分布,配置中需勾选上:Memory Map

    Image Entry point : 0x08000195:指程序入口地址。

    Load Region LR_IROM1 (Base: 0x08000000, Size: 0x000021f8, Max: 0x00080000, ABSOLUTE):
    指加载区域 LR_IROM1 起始地址为 0x08000000,大小有0x000021f8,这块区域最大为0x00080000.

    Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x000021d0, Max: 0x00080000, ABSOLUTE):
    指可执行区域 ROM_VECTOR 起始地址为 0x08000000,大小有0x000021d0,这块区域最大为0x00080000.

    5.Image component sizes

    存储组成大小配置中需勾选上:Size Info,其实主要就是对模块进行汇总存储大小信息

    Code:指代码的大小;

    RO-data:指除了内联数据(inline data)之外的常量数据;

    RW-data:指可读写(RW)、已初始化的变量数据;

    ZI-data:指未初始化(ZI)的变量数据;

    Code、RO-data:位于FLASH中;

    RW-data、ZI-data:位于RAM中;

    提醒:RW-data已初始化的数据会存储在Flash中,上电会从FLASH搬移至RAM中。

    关系如下:

    RO Size = Code + RO Data

    RW Size = RW Data + ZI Data

    ROM Size = Code + RO Data + RW Data

    现在已经弄明白Map文件的内容,可以做以下分析。

    (1)函数和变量所在的地址,这在推导函数调用栈时非常有用

    (2)根据Code RO data RW data 的组成部分,可针对性的优化ROM空间和RAM空间

    二、总结

           详细了解,也可以阅读我之前写的文章,链接,时间久了都忘差不多了,好在做了笔录,方便以后翻阅。
     

  • 相关阅读:
    15 | Spark SQL 的 SQL API 操作
    广电运通面试
    c语言编程 结构(struct)
    1.7 给大家介绍一下小红书账号 成长体系的10个等级【玩赚小红书】
    XAML语言
    无胁科技-TVD每日漏洞情报-2022-11-16
    第十章《日期与时间》第2节:Calendar类的使用
    M1、M2、M3、M4、M5、M6、M7硅整流二极管、型号参数、如何判断贴片二极管的好坏?
    C++中的享元模式
    【代码随想录】刷题笔记Day33
  • 原文地址:https://blog.csdn.net/qq_36075612/article/details/125579882