STM32如何查看Flash和RAM使用空间以及如何压缩RAM的使用空间

KEIL编译完成后,在Build Output窗口会出现一下信息:


Code是代码占用的空间;

RO-data是 Read Only 只读常量的大小,如const型;

RW-data是(Read Write) 初始化了的可读写变量的大小;

ZI-data是(Zero Initialize) 没有初始化的可读写变量的大小。ZI-data不会被算做代码里因为不会被初始化;

简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code + RO Data + RW Data

程序运行的时候,芯片内部RAM使用的空间为:               RW Data + ZI Data

我的代码中,Flash占用空间code =24586字节+RO-data=626字节,RAM占用空间为RW-data=220字节+ZI-data=8308字节


下面介绍如何压缩RAM空间,主要是一些全局变量的定义,大家可以打开自己工程文件夹下面的OBJ文件夹,找到一个后缀为.MAP的文件,可以找到



如图 可以看到不同变量占用RAM空间的大小及地址,可以根据这个删除不必要的变量或空间,可以节省RAM空间,选择小RAM的芯片,降低成本

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 在将STM32代码从Flash搬移到RAM的过程中,我们首先需要确保芯片的RAM容量足够存储代码。然后,我们需要将代码的链接脚本进行修改,以便将代码从Flash的地址重新定位到RAM的地址。接下来,我们需要进行代码的复制操作,将Flash中的代码复制到RAM中。 为了完成这个过程,我们可以使用如下的步骤: 1. 修改链接脚本:打开链接脚本文件并进行修改,将代码的起始地址和大小重新定义为RAM的地址和大小。 2. 修改代码运行起始位置:检查代码中的启动函数,确保它指向RAM的起始位置,而不是Flash的起始位置。 3. 复制代码到RAM:在代码的启动函数中,我们需要添加复制代码到RAM的操作。可以使用内置的复制函数(如`memcpy()`)或者手动复制方式进行。将Flash中的代码复制到RAM中后,确保更新相关变量的地址。 4. 设置向量表位置:在引导代码的开头,我们需要设置向量表的位置为RAM。这需要根据具体的芯片进行设置,可以通过修改SCB的VTOR寄存器来实现。 5. 更新中断向量表地址:在启动文件中,确保中断向量表的地址已经更新为RAM的地址。这样做可以确保芯片在中断发生时正确地跳转到RAM中的中断处理函数。 6. 验证代码正常运行:重新编译和烧写代码,并确保所有代码正常运行,没有出现异常或错误。 总结起来,将STM32代码从Flash搬移到RAM需要修改链接脚本和代码运行起始位置,并进行代码的复制操作。同时,还需要设置向量表的位置,更新中断向量表地址,并验证代码的正常运行。这样做可以提高代码的执行速度,尤其适用于性能要求较高的应用。 ### 回答2: 将STM32代码从Flash搬移到RAM的主要目的是为了提高代码的执行效率和响应速度。在Flash中存储的代码是只读的,因此每次执行代码时,MCU都需要从Flash读取指令,这会导致一定的读取延迟和访问速度下降。而将代码搬移到RAM中后,可以直接从RAM中读取指令,以极大地减少读取延迟和提高执行效率。 搬移代码的操作一般分为两步:将代码从Flash中复制到RAM,并将复制后的代码重新定位到RAM的起始地址。这样,当代码执行时,MCU会首先从RAM读取指令,而不需要再每次都从Flash中读取。 搬移代码的过程可以通过使用相关函数或指令来完成。在STM32中,可以使用HAL库中的相应函数,如HAL_FLASHEx_DATAEEPROM_Copy()函数来实现将Flash中的代码复制到RAM。在复制完成后,还需要根据具体的MCU型号和使用的开发工具,设置复制后代码的起始地址,以便MCU能够正确地访问RAM中的代码。 需要注意的是,将代码搬移到RAM中后,需要合理利用RAM的容量和管理RAM使用,因为RAM的容量一般比Flash有限。在复制代码之前,应该先估计代码的大小,并确保RAM有足够的空间来存储代码。此外,还可以考虑将一些频繁执行的代码块搬移到RAM中,以进一步提高执行效率。 总结来说,将STM32代码从Flash搬移到RAM是为了提高代码的执行效率和响应速度。通过复制代码到RAM并设置正确的起始地址,可以减少访问延迟,提高读取速度和执行效率。然而,在搬移代码时需要注意RAM的容量限制,并合理管理RAM使用。 ### 回答3: 将STM32的代码从Flash搬移到RAM可以提高代码执行效率和速度。通常情况下,STM32的代码存储在Flash中,当在运行时需要执行部分代码时,会从Flash中读取指令并执行。搬移到RAM后,所有代码都存储在RAM中,运行时不再需要从Flash读取指令,而是直接在RAM中执行指令,从而减少了访问存储器的时间。 实现将STM32代码从Flash搬移到RAM的步骤如下: 1. 在代码工程中将Flash部分的代码复制到RAM区域的一部分以确保代码可用。可以在代码中声明一个特殊的RAM段,将相关函数和变量放入其中。 2. 通过编译器和链接器设置,将这部分特殊RAM段的起始地址和大小与MCU的RAM进行关联。这样,编译器在生成可执行文件时会将相应的代码放到RAM区域中。 3. 在代码中修改启动向量,使得MCU重启后直接从RAM中启动,而不是从Flash启动。这可以通过设置复位向量表中的复位向量地址为RAM的起始地址来实现。 4. 对于涉及到中断向量表的代码,还需要修改中断向量表,使得中断服务程序能够从RAM中正确地执行。 通过将代码搬移到RAM中,可以减少Flash访问的延迟和读取时间,提高代码执行速度和效率。这在对实时性要求较高的应用中特别有用,例如控制任务响应、数据处理和实时通信等。然而,需要注意的是,将大量代码从Flash搬移到RAM可能会导致RAM资源紧张,因此需要仔细评估代码规模和RAM容量,以确保RAM能够容纳所需的代码和数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Justice_Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值