目录

  • 一、概述
  • 二、编译结果
  • 三、map文件

一、概述

本文主要记录下keil环境下,分析空间资源使用情况的基本方法。

二、编译结果

使用keil进行编译后,首先会得到如下信息:

其中:

  1. Code 表示程序代码部分
  2. RO-data 表示 只读的数据(read-only),如程序定义的常量const temp;
  3. RW-data 表示 可读写的数据(read-write),如已初始化的全局变量
  4. ZI-data 表示 0初始化的可读写变量(zero initialized),如未初始化的全局变量

占用的 flash =Code + RO-data + RW-data
占用的 ram = RW-data + ZIdata

  1. Q:这里RW-data为什么既占用flash,又占用ram呢?
    A:这是因为已初始化的数据会存储在Flash中,上电会从FLASH搬移至RAM中。
  2. Q:为什么ROM Size不包括ZI Data?
    A:这是因为已经初始化的数据,在掉电后需要保存初始值,以便上电运行后重载,因此存在rom中。而ZI Data数据都是0,上电运行后直接清零即可,包含进去反而浪费存储空间。

三、map文件

在工程的\Projects\Listings\目录下有一个map文件,这个目录与设置有关:

将map文件拖到keil中查看,可以在最下面看到信息:

这里直接给出了整个程序ram和rom的使用情况。当然map文件的使用情况不仅如此,目前主要用到的有:

  1. Global Symbols
    这部分内容给出了函数和全局变量的起始地址。
    当需要确认某个变量是否地址对齐时,可以从这里快速查找。如uin32_t类型的变量,起始地址不是4字节对齐,则会跨字节访问,有时会出现意想不到的问题。这时或许可以通过__align(4)关键字修饰来调整。
    从这里也可以看到全局变量的地址分布,在分析数组越界等异常行为时,往往会有帮助。
  2. Image component sizes
    在这一部分,可以查看单个C文件的资源使用情况。

    当需要对空间进行优化时,可以快速定位哪个源文件使用了较多的资源空间,进而查看是否可以进行缩减。

附一个map文件结构说明的博客:Keil 生成的Map文件分析。

Keil/MDK(1):查看STM32的RAM和ROM使用情况相关推荐

  1. Keil/MDK(2):STM32堆栈使用情况分析

    目录 一.概述 二..htm文件 三..s启动文件 一.概述 这一节主要记录下堆栈空间的设置.首先看下堆栈的概念: 栈区(stack):由编译器自动分配和释放,存放函数的参数值.局部变量的值等,其操作 ...

  2. stm32出现ram、rom不够用,调试方法

    STM32学习笔记:读写内部Flash(介绍+附代码) - 竹风清 - 博客园 https://www.cnblogs.com/pertor/p/9484663.html STM32 进阶教程 11 ...

  3. 以STM32F103RCT6为例分析单片机的RAM以及ROM使用情况

    1.stm32f103rct6的RAM:48k,ROM:256k 2.如果使用了原子的内存管理,在malloc.h中可以设置一片内存为动态内存,程序中用到的数组或为指针开辟内存就可以使用mymallo ...

  4. android如何获取RAM和ROM使用情况

    1.获取ram大小 两种方法: 第一从是从MemoryInfo中获取: private void getRamInfo1(){ActivityManager manager = (ActivityMa ...

  5. KEIL MDK 查看代码量、RAM使用情况--Code、RO-data、RW-data、ZI-data的解释

    KEIL MDK 查看代码量.RAM使用情况--Code.RO-data.RW-data.ZI-data的解释 原创李宜君 最后发布于2019-01-16 09:10:19 阅读数 146  收藏 展 ...

  6. STM32开发环境(工具)之Keil MDK 介绍

    STM32微处理器基于ARM核,所以很多基于ARM嵌入式开发环境都可用于STM32开发平台.开发工具都可用于STM32开发.选择合适的开发环境可以加快开发进度,节省开发成本.本章将先对STM32常用的 ...

  7. 使用Keil MDK以及标准外设库创建STM32工程

    应部分网友要求,最新加入固件库以及开发环境使用入门视频教程,同时提供例程模板,个人录制,欢迎指正.下载地址:http://dl.dbank.com/c0w0ehqynd 2013.3补充在线视频教程 ...

  8. ARM Keil MDK开发STM32工程模板

    使用Keil MDK开发STM32的工程模板 源代码工程 https://github.com/chenhaifeng2016/Band

  9. (2)stm32开发之使用Keil MDK以及标准外设库创建STM32工程

    通过上一节对标准外设库的介绍,想必各位读者对标准外设库已经有了基本的认识,然而由于标准外设库中文件众多,很多初学者在开始很长一段时间内甚至都无法完全自己建立一个工程,很多人只是依赖标准外设库或给定的工 ...

最新文章

  1. NSStream线程阻塞处理
  2. sequence.pad_sequences 的用法举例
  3. echart css样式弄了几个月了,样式一直都没有好好解决,好激动
  4. WebSocket——[Error during WebSocket handshake: Unexpected response code: 403]解决方案
  5. 【Android】手机端的投射
  6. 小程序开发语言python_小程序是用什么语言开发的?5种最佳语言分享
  7. C#反射——模仿BeanUtil属性复制
  8. 在Emacs24下的Java环境(Cedet+Elib+JDEE+ECB)
  9. Windows恶搞脚本,太实用了医院WiFi很快
  10. Android:Day03_完美登录案例(使用流和文件来保存登录信息)
  11. VS2005水晶报表教程
  12. 虚拟偶像春天来临,谁能从中脱颖而出?
  13. 金银猫 服务器维护,金银猫案情进展 投资者可在网上登记报案
  14. 计算机专业应届生简历英语作文,计算机专业毕业生英文简历范文
  15. 第一个用计算机编舞的人,多媒体平台·虚拟人·数字舞蹈
  16. 《D o C P》学习笔记(3 - 0)Regular Expressions, other languages and interpreters - 简介
  17. C语言数字图像处理---2.5图像频域滤波
  18. 【TigerGraph】图在复杂制造业中的应用
  19. 关于学计算机趣味段子,搞笑段子:路上一个女孩突然朝我走来问:你是不是学计算机的?...
  20. 嵌入式计算机是专用计算机吗,什么是嵌入式计算机?

热门文章

  1. c++ 返回空对象_python中file对象的常用方法
  2. C++轻量级微服务_微服务的部署
  3. 74ls161中rco是什么_什么是催化燃烧?如何选择催化燃烧设备?RCO和RTO有什么关系?...
  4. ##R语言生信作图之UpsetR做交集图
  5. oracle sequence sql server,SQL Server 实现oracle的sequence方法示例
  6. ppp lcp协商报文有哪些_PPP 点到点协议
  7. 6 redis 编译失败_Redis6 Windows 版本编译
  8. 解析字符串获取路径_node学习--path 路径模块
  9. static 结构体_C++基础-static
  10. Missing artifact jdk.tools:jdk.tools:jar:1.8报错