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

    文章

    1762

    浏览量

    156134
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1404

    浏览量

    121234
  • STM32
    +关注

    关注

    2313

    文章

    11210

    浏览量

    375295
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何在 RAM 中使用 NXP Link2 NXP Zephyr V4.1 运行“hello_world”示例

    大家好 我正在 i.MXRT1072 上使用 Zephyr OS 开发系统 MCUXpresso IDE ,我可以使用“将应用程序链接到 RAM”功能将二进制文件直接加载到
    发表于 05-25 07:28

    0基础看懂电阻:它到底电路做什么?

    不管是手机、充电器、家电,还是各种电路板,里面都藏着一个超基础的电子元件——电阻。它看起来就是个小小的贴片、不起眼的小圆柱,很多人都好奇:这个小东西,到底电路有什么用? 这篇文章完全抛开复杂公式
    的头像 发表于 04-27 14:32 461次阅读
    0基础看懂电阻:它到底<b class='flag-5'>在</b>电路<b class='flag-5'>里</b>做什么?

    STM32N6 PSRAM 上运行代码的调试

    开发其产品过程,使用了 STM32N657X0H3Q。客户的代码很大,不能放在SRAM 上运行,想放在 PSRAM 上去运行,并咨询如何在 STM
    发表于 04-15 16:02 0次下载

    单片机程序运行方式

    控制权交给用户程序。如果是新的芯片还没有下载过,那么就停留在读取串口状态的循环中。 启动代码通常都烧写在flash,它是系统一上电就执行的一段程序,它
    发表于 01-16 06:57

    Infineon SEMPER NOR Flash与HYPERRAM™ 2.0 Gen2 Flash+RAM MCP产品解析

    Infineon SEMPER NOR Flash与HYPERRAM™ 2.0 Gen2 Flash+RAM MCP产品解析 引言 汽车集群和工业HMI应用,通常会使用NOR
    的头像 发表于 12-20 16:20 1474次阅读

    FLASH的代码是如何得到运行的呢

    ARM为例: ARM-cortex-M3/4的单片机(比如STM32 等):该类单片机的代码nor flash
    发表于 12-04 08:06

    MCU代码需要搬到RAM才能运行吗?不这样做会有什么不妥嘛?

    是块,不能对指令直接寻址,因此不能直接运行其中的代码。 因此保存在nand flash程序不加载到ram
    发表于 12-04 07:39

    Nuclei IDE烧写程序无法成功的原因及部分解决办法

    ; 重新生成mcu200t的mcs文件,下载至FPGA 2. lim运行蜂鸟的helloworld程序,若成功则执行步骤3 3. 下载helloword
    发表于 10-31 06:24

    如何从 flash 把代码搬运到 ram 运行的?

    没有已经移植适配过的芯片 运行机制是从 flash 把代码搬运到 ram 运行
    发表于 09-28 11:03

    TLE9893是否支持FLASH1上运行代码来擦除和编程FLASH1?

    芯片TLE9893是否支持FLASH1上运行代码来擦除和编程FLASH1。NVM-PROG_UCODE
    发表于 08-13 08:14

    嵌入式系统FLASH 程序代码必须搬到 RAM 运行吗?

    嵌入式系统FLASH 程序代码并非必须搬到 RAM
    的头像 发表于 08-06 10:19 1606次阅读
    嵌入式系统<b class='flag-5'>中</b>,<b class='flag-5'>FLASH</b> <b class='flag-5'>中</b>的<b class='flag-5'>程序</b>代码必须搬到 <b class='flag-5'>RAM</b> <b class='flag-5'>中</b><b class='flag-5'>运行</b>吗?

    如何将Flash刷写程序放到SRAM运行

    客户要求Flash driver不能存储Flash,需要在升级的时候,由CAN FBL发送到SRAM,再
    发表于 07-15 07:22

    STM32Cube IDE1.18.0 写ODR编译不成,咋办?

    STM32Cube IDE1.18.0写ODR 编译不成,咋办?
    发表于 06-09 07:36

    CUEBIDE生成的APP程序写入FLASH之后无法正常跳转怎么解决?

    (); STM32F407ZGTX_FLASH.ld修改 / Memories definition / MEMORY { CCMRAM (xrw) : ORIGIN = 0x10000000
    发表于 06-09 06:43

    CUEBIDE生成的APP程序写入FLASH之后无法正常跳转怎么解决?

    (); STM32F407ZGTX_FLASH.ld修改 /[i] Memories definition / MEMORY { CCMRAM (xrw) : ORIGIN = 0x10000000
    发表于 06-05 07:15