好久没写博客,-.-。
因为接触两个新的平台,芯翼和OPL,又发现对内存和flash分布的一些疑问,或许是自己根基不够稳吧,如果要搞清楚这些的意义,需要以下几个步骤:
2.RO,RW,ZI 是什么
3.flash,ram是什么
4.flash,ram和ro,rw,zi的关系
5.熟悉ARM程序启动流程
其实4和5是联系的,ARM程序的启动决定了flash,ram和ro,rw,zi的关系。
RO,RW,ZI是什么前面博文已经介绍过,
FLASH 一个是就是嵌入式系统的‘硬盘’,是存储器的一种,支持断电保存数据,可擦写,且速度快;
RAM 称为随机存取存储器,也是一种存储器,特点断电数据丢失,擦写数据快,就是我们称之为的‘内存’,存放全局变量,堆栈等数据;
相信很多人跟我一致有这种体会,网上一堆资料,逛了一圈后感觉自己已经掌握了又似乎没掌握,
我做了下总结,有不一致评论写一下:
关于第4点:
flash=ro+rw没有ZI
ram=rw+zi,因为ZI都是会被初始化为0,STM32(嵌入式系统平台大概率都是)启动后rw会从flash被拷贝到ram中执行,flash里的rw只存了初始值不为0的数据,ZI是没初始化和初始化为0的数据,ro因为包括代码段和常量,不会被拷贝到RAM,因为嵌入式RAM资源紧张,但是如果你的RAM够大也可通过技术手段将代码拷贝到RAM执行(我不会)。
上面介绍的是RW和ZI的执行,那么我们的RO呢,即code代码,以Cortex-M3为例,支持XIP模式,即代码都在flash中执行,有部分中断高频代码会拷贝到RAM中。

本文探讨了嵌入式系统中的内存分配概念,如RO、RW和ZI区域,并解释了它们与FLASH和RAM之间的关系。此外还介绍了ARM程序启动流程及不同内存区域的作用。
3729

被折叠的 条评论
为什么被折叠?



