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

    文章

    1634

    浏览量

    148006
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1368

    浏览量

    114677
  • STM32
    +关注

    关注

    2270

    文章

    10900

    浏览量

    355922
收藏 人收藏

    评论

    相关推荐

    cyt4bb7cebq0代码放在flash执行会导致异常的原因?

    切换的代码都放在RAM运行么? 因为是要对flash进行操作的,代码也放在flash执行会导
    发表于 05-27 08:21

    ram还是flash快?

    ] ...... /****************************************************/ 结论就是: 1. 跑ram还是
    发表于 05-17 15:49

    用STM8S103K3来做IAP自升级功能,烧写Flash程序运行RAM,到了某一个固定的位置就会写错为什么?

    大家好,我目前用STM8S103K3来做IAP自升级功能。 目前,我是用ARM来转128个字节过来给STM8,然后,让烧写Flash程序运行RA
    发表于 05-16 06:45

    STM32F4 Keil程序RAM调试运行的问题求解

    用Keil,设置好向量表ram,然后修改程序位置,调试载入时设置pc,sp等,能正常调试。我的程序仅仅就是进入main后,初始化串口,开
    发表于 05-13 06:51

    STM32F103XX系统的mcuFLASH_OBR寄存器中有个USER【User option bytes】字段,这是什么意思?

    STM32F103XX系统的mcuFLASH_OBR寄存器中有个USER【User option bytes】字段,请问这个是什么意思?用于什么作用的?必须得配置
    发表于 05-10 06:13

    STM8RAM运行遇到的疑问求解

    系统函数,而这个系统函数flash里面。这个时候我把flash 已经关了。程序就执行不动了。 RAM的地址域是from 0x0000 t
    发表于 05-07 07:32

    为什么将延时程序搬到RAM运行反而变慢了?

    原先delay()主循环中演示闪灯的,后来搬到RAM运行,发现闪灯变慢了,怎么会在RAM
    发表于 05-07 06:32

    关于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