从事手机平台研发也有一年多了,总结了一下有关手机内存方面的知识希望对新手有所裨益。如果有高手路过查看之余如有纰漏之处还请不吝赐教~
说明:传统“烧机”流程将软件烧录到FLASH中,软件bootloader部分在NOR flash中, 软件的其他部分烧录到NAND flash 。
强调一点:上图左边部分是Flash仍是由NOR flash和NAND flash两部分组成, 从软件的角度我粗略地分成了RO和RW 。 RO部分具有“只读”属性,通常包含指令代码(指令当然是只读的啦)和声明成const的全局数据。RW具有“读写”属性,一般包含初始值非零的全局数据。当然还有ZI段, ZI段包含初始值为零的全局数据,因为都是0所以在烧机到flash的时候没有必要占有实际的空间。
“加电开机”过程将RW段拷贝到ram中,ZI段也将在这里占有实际的空间。那么剩余的部分可以用作线程栈和堆(一般实际系统中堆都是用一个大的全局数组分配出来了所以可以说堆是在ZI部分)。注意到在最后面有一个”co_f_NAND”是”copy from NAND flash”的简写(下图中会做说明)。
说明: 上图中flash分成了NOR flash和NAND flash两段。NOR flash除了具有一
般flash掉电不丢失数据、可读可写的特点外, 它的读取和SDRAM以及SRAM是一样的. 可以直接运行装载在NOR flash里面的代码,因此我们将bootloader部分烧录到NOR flash中。 而NAND flash读写是按块的,通常每块的大小是512字节。 NAND flash里面的指令通常要预加载到SDRAM中,再由CPU取指。需要特别注意的是一般嵌入式系统会从NAND flash划分出一段作为硬盘使用(因为它完全满足硬盘的特点:按块“读写”,掉电不丢失。)