我看ram还有10k,为啥keil提示stm32内存空间不足

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我看ram还有10k,为啥keil提示stm32内存空间不足相关的知识,希望对你有一定的参考价值。

参考技术A 解决办法
一、可卸载不常用软件
腾讯手机管家——软件管理——选择软件——卸载
二、其次清理垃圾
腾讯手机管家——清理加速——一键清理加速
或手机瘦身——软件搬家——选择——确认搬家就可以了
时间长,视频缓存都会有垃圾的,建议经常清理下,保持手机稳定运行本回答被提问者采纳
参考技术B 先检查一下Keil是否已经激活,否则会有代码空间限制。

Keil/MDK:查看STM32的RAM和ROM使用情况

一、概述

本文主要记录下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文件分析

以上是关于我看ram还有10k,为啥keil提示stm32内存空间不足的主要内容,如果未能解决你的问题,请参考以下文章

STM32 KEIL C如何在RAM中调试FREERTOS?

Keil/MDK:查看STM32的RAM和ROM使用情况

关于STM32 KEIL MDK环境下,程序在RAM中调试的问题

刚装的keil4,按照教程建立了project,编程为啥出现Target not created?

stm32 keil 中 irom1 irom2 怎么设置

为啥keil使用JLINK调试STM32要不报错,要不就是keil挂了?求大神指点。