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

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

3天内不再提示

ARM STM32中的程序是在RAM里还是在FLASH里运行?

冬至子 来源:老羊快跑 与 深度学习 作者:老羊快跑 2023-10-27 14:06 次阅读

STM32有两个存储空间,一个是片上的FLASH,一个是片上的RAM。RAM相当于内存,FLASH相当于硬盘。(以下英文大小写不分)

图片

Keil下,工程编译完成总会出现上面的信息,这些信息都代表什么呢?代表程序占用的空间。

Code表示程序代码部分

RO-data 表示程序定义的常量(如:intconst x等);

RW-data 表示已初始化的全局变量

ZI-data 表示未初始化的全局变量,以及初始化为0的变量

下面给出三个值:

RO Size= Code + ROData (程序占用FLASH空间的大小)

RW Size=RW Data + ZIData (运行时程序占用RAM空间的大小)

ROM Size=Code + RO Data + RWData (烧写时程序占用FLASH空间的大小)

我们都知道,在烧写程序的时候,需要烧写bin文件或者hex文件到STM32的flash当中,被烧写的文件称为映像文件image。Image的内容包含三部分:code,RO-data 和RW-data。

为什么Image不包含ZI数据呢,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域(这一区域在RAM中)一律清零即可。包含进去反而浪费flash存储空间。

STM32上电启动以后,cpu根据boot0和boot1的硬件引脚决定从flash还是ram中启动,默认是从flash中启动;启动之后会搬运rw-data到ram,但是不会搬运code;也就是说cpu执行的代码是在flash中读取的,而不是在ram中。当然这个flash是nor型的.

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

    关注

    10

    文章

    1550

    浏览量

    146646
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1321

    浏览量

    113705
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348743
收藏 人收藏

    评论

    相关推荐

    关于STM32G473程序运行FlashRam速度的疑问求解

    关于STM32G473程序运行FlashRam速度问题,向大家请教一下。之前用的是F4系列的程序
    发表于 04-12 07:18

    STM32F103断服务程序设置断点没有停下来是什么原因引起的?

    STM32F103程序,调试时定时器中断服务程序设置了断点,但是没有停下来,程序能正常
    发表于 04-07 08:02

    使用外部QSPIKEIL调试老是不对,为什么?

    我打算程序QSPI 运行,但是要实现在KEIL调试,我首先将STM32H750 W25Q6
    发表于 04-01 07:21

    STM32HIAR如何实现从FLASH加载到SRAM运行程序

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

    STM32CubeIDE用STLINK调试下载程序老是出错的原因?

    哪位大神知道STM32CubeIDE用STLINK调试下载程序老是出错,显示启动GDB服务器失败!要么找不到STLINK序列号!反正用STLINK下载不了
    发表于 03-11 07:27

    怎么才能实现eclipse+jlinkRAM调试代码?

    使用eclipse+jlink下载到flash调试stm32g0已经可以,现在想把代码放到RAM调试,改了3个地方,但失败了,请问有研究
    发表于 03-08 07:20

    TC265如何将特定函数挪至RAM运行

    目前在做TCC265的bootloader,需要把操作flash的代码挪至RAM运行。目前根据资料尝试过初始化阶段通过memcopy函数
    发表于 02-19 08:33

    Falsh和RAM运行同一段代码,执行效率相同吗?

    Flash运行程序和在RAM运行程序,同一段代
    发表于 02-19 07:10

    嵌入式开发中,如何将Flash中的程序转移到RAM运行

    嵌入式开发中,如何将Flash中的程序转移到RAM运行Flash存储器是嵌入式设备中常用的一种非易失性存储器,它通常用来存储
    的头像 发表于 10-29 16:23 1490次阅读

    程序运行STM32H750的外扩FLASH上两小时后死机该如何处理

    程序运行STM32H750 的外扩 FLASH 上两小时后死机
    的头像 发表于 10-24 15:20 2198次阅读
    <b class='flag-5'>程序</b><b class='flag-5'>运行</b>在<b class='flag-5'>STM32</b>H750的外扩<b class='flag-5'>FLASH</b>上两小时后死机该如何处理

    KEIL如何让程序RAM运行

    STM32F411Nucleo 的一个例子来介绍几种让程序 RAM 运行的方法。
    发表于 09-28 08:19

    IAR下如何将程序拷贝RAM运行

    有时候我们需要将一部分程序FLASH 拷贝到 RAM 运行,以提高程序
    发表于 09-28 06:50

    RISCV的生态有没有可以离线分析MCU运行异常的工具?

    大家好, 请教一下大家RISCV的生态有没有可以离线(不接开发板)分析MCU运行异常的工具; 具体的流程: MCU运行过程发生异常,主动上报Assert,
    发表于 08-12 07:33

    将APP程序放入地址为0x10000为首地址的flash内存BOOT程序判断进行地址跳转无法实现怎么解决?

    我将我的APP程序放入地址为0x10000为首地址的flash内存BOOT程序判断进行地
    发表于 06-27 07:58

    keil如何烧录data flash数据的?

    的 ? 2、keil如何烧录data flash数据的? 3、ICP如何烧录data flas
    发表于 06-13 07:48