0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

剖析STM32的FLASH和SRAM的使用情况

FPGA之家 来源:嵌入式案例Show 作者:嵌入式案例Show 2021-04-09 17:53 次阅读

01前言

STM32片上自带FLASH和SRAM,简单讲FLASH用来存储程序的,SRAM是用来存储运行程序中的中间变量。本文详细分析下如何查看程序中FLASH和SRAM的使用情况。

本文开发工具: keil5

芯片: STM32F105VCT6

02FLASH和SRAM介绍

FLASH存储器又成为闪存,它与EEPROM都是掉电后数据不丢失的存储器,但是FLASH的存储容量都普遍的大于EEPROM,在存储控制上,最主要的区别是FLASH芯片只能一大片一大片地擦除,而EEPROM可以单个字节擦除。

SRAM是静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。STM32F1系列可以通过FSMC外设来拓展SRAM。

注意:SRAM和SDRAM是不相同的,SDRAM是同步动态随机存储器,同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。STM32的F1系列是不支持SDRAM的。

stm32不同型号的SRAM和FLASH大小是不相同的,可在datasheet中查看如下图:

08d40a92-990f-11eb-8b86-12bb97331649.png

08ee58de-990f-11eb-8b86-12bb97331649.png

03编译结果分析

在keil中编译结果如下图:

0915ec64-990f-11eb-8b86-12bb97331649.png

打开生成的map文件拉到最后可看到如下:

093488e0-990f-11eb-8b86-12bb97331649.png

编译结果里面几个的含义

Code:代码空间,本质是ARM指令( FLASH)。

RO-data:即 Read Only-data, 表示程序定义的常量,如 const 类型( FLASH)。

RW-data:即 Read Write-data, 非0初始化的全局和静态变量占用的RAM大小,同时还要占用等量的ROM大小用于存放这些非0变量的初值(FLASH+RAM)。

ZI-data:即 Zero Init-data, 0初始化的内存区的大小(该区域3个用途:0初始化的全局和静态变量+堆区+栈区)(RAM)。

由上可知:

程序占用FLASH=Code + RO-data + RW-data 即map文件中ROM size

程序占用RAM = RW-data + ZI-data 即map文件中RW size

常见的俩个疑问:

1、RW-data为什么会即占用Flash又占用RAM空间?

由前文知道RAM掉电数据会丢失,RW-data是非0初始化的数据,已初始化的数据需要被存储在掉电不会丢失的FLASH中,上电后会从FLASH搬移到RAM中。

2、为什么烧录的镜像文件不包含ZI-data呢?

我们都知道在烧写程序的时候,需要烧写bin文件或者hex文件到STM32的flash中,被烧写的文件称为镜像像文件image。image的内容包含这三个Code 、 RO-data 和 RW-data。

通过第一个问题大家应该有所理解,因为ZI数据是0,没必要包含,只要在程序运行前把ZI数据区域一律清零即可,包含进去反而浪费Flash存储空间。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1621

    浏览量

    147735
  • 存储器
    +关注

    关注

    38

    文章

    7447

    浏览量

    163582
  • STM32
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354694

原文标题:STM32的FLASH和SRAM的使用情况分析

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    LMX2592正常使用情况下温度大概有多少?

    你好,LMX2592如果将 OUTA_PD = 1;OUTB_PD = 1;为什么芯片还是很烫,正常使用情况下温度大概有多少,对于温度的变化可以提供一下参考吗
    发表于 11-08 08:32

    TMS320C64x在高性能DSP应用中的高速缓存使用情况

    电子发烧友网站提供《TMS320C64x在高性能DSP应用中的高速缓存使用情况.pdf》资料免费下载
    发表于 10-21 09:43 0次下载
    TMS320C64x在高性能DSP应用中的高速缓存<b class='flag-5'>使用情况</b>

    Banana Pi BPI-M7 RK3588开发板在 Linux 上检查 Rockchip NPU 使用情况

    如下介绍如何监控 Rockchip 设备的 NPU 使用情况。 如今,新型设备开始配备内置 AI 芯片。“AI 芯片”的正确技术术语是 NPU,即神经处理单元。 如果您有板载 NPU
    的头像 发表于 07-11 16:47 353次阅读
    Banana Pi BPI-M7 RK3588开发板在 Linux 上检查 Rockchip NPU <b class='flag-5'>使用情况</b>

    如何查看TC397内存的使用情况

    Hi,请问,如何查看 TC397 内存的使用情况?谢谢!
    发表于 05-22 07:50

    可以从下面的图看出我的工程flash和ram的使用情况吗?

    芯片是:dspf28335;可以从下面的图看出我的工程flash和ram的使用情况吗?感觉flash还可以,ram有点不够用了,请求大师指点,如何分析?
    发表于 05-11 10:11

    请问STM32G070的DMA支持把sram的数据搬到Flash吗?

    STM32G070的DMA支持把sram的数据搬到Flash吗?
    发表于 03-28 09:46

    CUBEIDE运行完可以看RAM的使用情况,运行中可以实时查看RAM的使用情况吗?

    CUBEIDE运行完可以看RAM的使用情况,运行中可以实时查看RAM的使用情况吗?以及负载情况? 图片是运行完可以看RAM使用情况,是否可以运行中实时查看?是不是cubemonito
    发表于 03-12 07:56

    rtthread编译后如何查看堆栈空间使用情况

    rtthread编译后如何查看堆栈空间使用情况,现在只能在编译完成后看到总大小,有没有办法能看到详细的使用情况。 由于RAM只有128K,除去内存池32k,想看看剩余的RAM在哪用了
    发表于 03-05 07:58

    stm32 flash写数据怎么存储的

    stm32 flash写数据怎么存储的  STM32是一款广泛应用于嵌入式系统开发的微控制器,它的Flash存储器是其中一个重要的组成部分。在本文中,我将详细介绍
    的头像 发表于 01-31 15:46 2247次阅读

    如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况

    我知道嵌入式软件构建工具会报告程序闪存使用情况。我认为他们也报告 RAM 使用率,但他们是否报告最大 RAM 使用率? 生成工具可能不知道在运行时将使用多少堆。是否有构建工具不知道的其他 RAM 使用情况? 如何准确找出运行时使用了多少RAM?
    发表于 01-22 07:02

    有什么办法可以获取TC397中的实时内存使用情况吗?

    有什么办法可以获取 TC397 中的实时内存使用情况吗? 例如,我能否通过计算当前堆栈指针值和基本堆栈指针值之间的差异来获得使用的内存大小?
    发表于 01-22 06:18

    请问TC397如何查看RAM和pFlash的使用情况

    请问 TC397 如何查看 RAM 和 pFlash 的使用情况
    发表于 01-19 06:37

    正常使用情况下LTC3331的ship引脚接高电平还是低电平?

    正常使用情况下,LTC3331的ship引脚接高电平还是低电平?
    发表于 01-05 11:07

    stm32变量能存进flash中吗

    当涉及到将变量存储在Flash中时,我们通常指的是将变量存储在STM32微控制器的闪存器件中。在STM32芯片中,闪存用于存储程序代码和只读数据,但对于一些应用情况,我们可以使用闪存来
    的头像 发表于 12-28 15:33 2040次阅读

    显示Web服务器中的内存使用情况

    Web服务器上,您可以在“内存”选项卡的“诊断”网页上找到有关各个内存区域当前使用情况的信息。
    的头像 发表于 12-18 10:18 768次阅读
    显示Web服务器中的内存<b class='flag-5'>使用情况</b>