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

    文章

    1646

    浏览量

    149015
  • 存储器
    +关注

    关注

    38

    文章

    7538

    浏览量

    164586
  • STM32
    +关注

    关注

    2275

    文章

    10932

    浏览量

    358366

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

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

收藏 人收藏

    相关推荐

    Linux下如何管理虚拟内存 使用虚拟内存时的常见问题

    查看虚拟内存使用情况 : 使用 free 命令可以查看当前的虚拟内存使用情况,包括物理内存、交换空间等的使用情况。 调整交换空间大小 : 如果需要调整交换空间的大小,可以使用 swapoff 命令关闭现有的交换空间,然后使用
    的头像 发表于 12-04 09:19 704次阅读

    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 504次阅读
    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

    STM32有什么办法可以测试在操作一块flash时,刚好完成了一半就被另外一块地址的flash操作打断了的这种情况

    有什么办法可以测试在操作一块flash的时候,刚好完成了一半就被另外一块地址的flash操作打断了的这种情况? ,主要是想看这样操作是否可以以及操作会出现什么异常?启动模式SRAM或者
    发表于 04-18 06:51

    STM32访问FPGA内部SRAM部分区域为什么只能读不能写?

    采用STM32F427+FPGA+FlashSTM32通过FMC总线访问FPGA内部SRAM,起始地址为0x60000000; Flash中存储FPGA的配置数据,
    发表于 04-16 06:39

    stm32f4 FLASH_ProgramDoubleWord函数数据不能写入flash的原因?

    STM32F401芯片,调用flash写函数时,如果写一个字,也就是调用stm32f4 FLASH_ProgramWord函数,能正确写入;如果换成
    发表于 04-12 06:50

    STM32把程序下到SRAM里调试好用吗?

    刚学会把程序下到SRAM里,以前都直接下载到flash里。下载速度好像也差不多,下载到SRAM里比较麻烦。flash有寿命,直接下载到flash
    发表于 04-08 06:35

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

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

    STM32H在IAR中如何实现从FLASH加载到SRAM中运行程序?

    如题,STM32H 在IAR中如何实现从FLASH加载到SRAM中运行程序 有没有相关的例程可供参考
    发表于 03-28 07:46

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

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

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

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

    使用rt_thread nano有办法查看线程的资源占用情况吗?

    使用rt_thread nano ,有办法查看线程的资源占用情况麽?
    发表于 02-26 06:05