深入浅出Wince的存储

刚学wince那会,对wince下面的文件存储老是理解不了,或者说容易搞混. 最近公司在做一个wince下的终端移植项目,中间也遇到了一些存储方面的问题,我自己学wince也有一段时间了,现在对wince的几个存储的概念也可以谈论一二了.

现在市场上的基于wince的板子,基本上有下面几种存储设备, nand flash, nor flash, SDRAM,

SD卡, u 盘. SD卡和U盘不说了,跟PC机没什么驱别. 

先说说nand flash(nor flash就不说了,类似), 你可以把它理解为电脑上的硬盘, OK, 我们看一下电脑上的硬盘里放了什么?, 首先是你的操作系统文件占据了C盘的一部分空间,  C盘剩下的空间以及其它盘的空间就是你可以随便用的. 再来看看nand flash, 它一般被分为三个部分, 首先是一个叫boot loader的东东,然后是你的wince的映像文件, 最后剩下的部分的就是你可以任意使用的. Boot loader 主要做两件事,一是初始化一些硬件资源(比如cache), 二是加载wince系统运行. 你可能要说,nand flash与电脑硬盘的区别就是它多了一个boot loader. 其实这样说不完全对,电脑其实也有一个bootloader, 它的名字叫BIOS. 只不过BIOS不是放在硬盘里,而是固化在主板上的只读ROM里.

Nand flash剩下的这部分这间怎么用呢,wince第一次启动时,打开”我的设备”是看不到这部分空间的,需要你到”存储器管理器”(在控制面板里)去格式化一下,然后新建一个分区. 这之后即使你冷启动系统,它也是可见的.

有个问题我们都很想知道,wince最大可以支持多大的nand flash呢? 一般情况下,bootloader也就是几百K, wince系统映像几十M, 我们当然是希望nand flash越大越好, 这样我们能任意支配的空间就大了. 先来看一下PC上最大可以支持多大的硬盘容量. 目前市场上已出了T数量级的硬盘, 你的电脑能支持的硬盘容量是什么决定呢. 是主板,再具体点,是BIOS,如果你的主板支持48 bit LBA(寻址), 则硬盘最大可以是2的48次方.

是不是wince能支持的最大nandflash也不是wince系统决定的呢. 市场上的nand flash 芯片硬件接口无非是下面几部分,控制引脚,数据引脚夫,电源和地引脚. 然后数据口和地址是复用的. 下面是K9F1208U0B的引脚图,可以很清楚的看到上面几部分(NC表示不用)

 深入浅出Wince的存储

 

是了,只要能和CPU在硬件上接口匹配,然后bootloader里驱动做相应改动,就可以支持市场上最大的nand flash, 目前市场上最大的nand flash容量我不是很清楚,但06年三星就已经推出了32G的nand flash, 所以现在最大的容量起码也得大过这个数. Nand flash.

好了,该说说wince下的内存了. 一般我们买一块基于wince的开发板,如果厂家说这个板子的内存是64M, 一般就是说SDRAM有64M, wince的内存在硬件上就是这个SDRAM(至于什么是SDRAM,网上有很多资料).

Wince 下的内存实际上是分为三个部分的. 先说这几部分的名字,对象存储, 系统内存,程序内存. 准确来讲,应该用下面公式说明.

 Wince内存 = 系统内存 + (对象存储 + 程序内存).

为什么要把后面两个用括号括起来呢. 是为了强调它们的关系密切. 拿64M的这个板子举例. 开发板上电, 进入控制面板—系统,上面显示内存是30M左右, 怪了,明明是64M的DRAM,怎么少了近一半?

要回答这个问题, 先来看看PC机上的情况, 假设你的电脑内存是1G, 开机,你没有运行任何程序, 打开任务管理器, 内存已经用了200多M了(不同的机器可能有点不同), 你应该已经想到是为什么了,操作系统本身运行也是要用内存的.

Wince运行也要占用内存, 这就是前面为什么少了30多M的内存. 这部分内存我把它叫系统内存, 或者说是wince映像占用的数据内存.

是不是剩下的30M左右的内存就可以完全给我们自己写的程序用了呢, 当然不是, 看一下前面的公式, 剩下的内存又被分成了两部分,对象存储和程序内存. 程序内存不用解释,就是可供我们的程序用的内存, 对象存储是wince里一个新的概念. 嵌入式wince操作系统一般是用在消费电子上面, 比如pocket pc, 手机, PDA等移动设备上. 这一类的设备一般都是有两个电源的, 一个是主电源(比如你的手机电池), 一个是后备电池(拆开手机,电路板上可以找到那个小电池). 后备电池的作用就是在主电源没电的情况下,维持操作系统的一些需要保存的数据, 比如注册表, 数据库等. 而这些要保存的数据就是放在对象存储里的,可以复制一个文件到wince下(SD卡,U盘除外),会发现对象存储占用空间变大,到这里,你应该理解对象存储了

 

好了,内存的三部分搞清楚了, 你可能想知道,这三部分的比例是怎么分的呢,是系统固定死了吗, 当然不会, 嵌入式的设备种类有上千种,嵌入式操作系统应该具有充分的灵活性满足不同的需要. 先看看系统内存怎么改.用pb打开一个你的工程, 在config.bib里的Memory域里(bib文件的格式和作用可以去网上查), 会看到类似下面的语句:

NK      80001000  01E00000  RAMIMAGE

第一个数是起始地址,第二个就是size了.

对象存储和程序内存的大小修改就比较人性化了, 打开控制面板-存储器管理器,可以看到一个滑块,左右移动它就可以改变它们的比例.  但是有一点要注意,这个设置是不会被保存的, 系统冷启动后还是会恢复默认设置的(一般是各占一半). 那怎么办呢?有办法, 如果你在配置系统时就知道这两部分内存所要占的比例,可以在config.bib里加上下面的语句

FSRAMPERCENT = 0Xxxxxxxxx

这个值可以改变默认设置.

最后一个问题,  wince最大支持多大的物理内存, 也就是SDRAM最大可以是多少. 这个是由CPU决定的, 拿三星的2410举个例子. 打开芯片手册,找到Memory controller那个章节,可以看到下面这个图

深入浅出Wince的存储

清楚了,只有最后两个bank支持SDRAM,每个bank最大128m, 所以最大2410最大支持256M的SDRAM.

就说这么多吧,希望对大家有帮助.

你可能感兴趣的:(WinCE)