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

    文章

    1715

    浏览量

    154706
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1398

    浏览量

    119824
  • STM32
    +关注

    关注

    2305

    文章

    11121

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

    单片机程序的执行

    memory)存放,而数据就放在了RAM(flash的写入次数有限制,同时它的速度和RAM还是
    发表于 12-04 06:20

    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 1138次阅读
    嵌入式系统<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

    【中科昊芯Core_DSC280025C开发板试用体验】+2.RAM工程与FLASH工程对比

    。代码运行RAM下,主要用于开发调试模式,优点是下载速度快,运行的也快,缺点是断电程序就丢失了。 若代码
    发表于 07-04 10:37

    STM32IDE如何设定代码到ITCM运行

    摸索到了如何将变量定义到某个地址,但是不清楚如何让代码指定RAM运行。按照设定变量的方式设定代码,程序直接进入了异常中断{:16:}。
    发表于 06-24 06:45

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

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

    STM32G473 flash擦除时程序卡死的原因?

    进行双bank升级的时候,会先进行FLASH的批量擦除。连续的升级过程中发现成功几次后出现了执行擦除flash操作时程序卡死的情况,直
    发表于 06-09 07:23

    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

    mcvip源码,TVP5158_patchDownload这个函数主要是写什么进VBUS

    mcvip源码,TVP5158_patchDownload这个函数主要是写什么进VBUS?VBUS又有什么作用?手册好像没说明白
    发表于 02-11 06:52