WINCE的内存配置_第1页
WINCE的内存配置_第2页
WINCE的内存配置_第3页
WINCE的内存配置_第4页
WINCE的内存配置_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、WINCE 的内存配置WINCE 的内存配置 WINCE 的内存(包括 SDRAM 及 FLASH )的配置包含两个方面:源代码 (包括 C 和汇编 )中的 定义 ,及系统配置文件 CONFIG.BIB 中的定义。源代码中需 要定义内存的物理及虚拟地址,大小,并初始化名为 OEMAddressTable 的结构数组,以告知系统物理地址与虚 拟地址的对应关系,系统根据其设置生成 MMU 页表。而 CONFIG.BIB 中一般会将内存定义成不同的段,各段用作不 同的用途。 CONFIG.BIB 文件 CONFIG.BIB 文件分两个部分, 我们且称之为段, MEMORY 段和 CONFIG 段。

2、MEMORY 段定义内存的分片方法, CONFIG 段定义系统其它的一些属性。 以下是一个 CONFIGBIB 文件 MEMORY 段的例子:MEMORY; 名称起始地址大小属性RESERVEDRESERVED8000000000008000DRV_GLBRESERVED8000800000001000CS8900RESERVED8001000000030000RESERVEDNK800C000000740000RAMIMAGERAM8100000000800000RAM 名称原则上可以取任意字符串,ROMIMAGE通过一个内存片的属性来判断它的用途。 RESERVE 属性表明该片内存是 BS

3、P 自己使用的,系统不必关心其用途; RAMIMAGE 说明 它是一片存放 OS IMAGE 的内存; 而 RAM 则表示些片内存 为 RAM ,系统可以在其中分配空间,运行程序。但存放 ROM 的这片内存的名称,即 NK 一般不要改动。因 为 BIB 文件中定义将一个文件加入到哪个 ROM 片( WINCE 支持将 ROM IMAGE 存放在不连续的几个内存片中)中时 会用到这个名称, 如下现这行 BIB 文件项就定义将 touch.dll 放在名称为 NK 这片 ROM 中,touch.dll $(_FLATRELEASEDIR)touch.dllNK SH因而,如果将 NK 改为其它名称

4、,则系统中所有的 BIB 文件 中的这个 NK 串都需要改动。注意:保证各片内存不要重叠;而且中间不要留空洞,以节 约内存;两种设备如果不能同时被加载,就应该只为其保留 一片从而节约内存,例如,本例中的 CS8950 是为网卡驱动程序保留的, EDBG 是为网卡作调试( KITL )用时保留的, 而系统设计成这两个程序不会同时加载( CS8950 在启动时 判断如果 EDBG 在运行就会自动退出) ,这样为这两个驱动 程序各保留一片内存实在浪费而且也没有必要。RAM 片必须在物理上是连续的,如果系统的物理内存被 分成了几片,则在 RAM 片只能声明一片,其它的内存在启 动阶段由 OEMGetE

5、xtensionDRAM 报告给系统,如果有多 于一个的内存片, 应该用 OEMEnumExtensionDRAM 报告。 NK 片则没有此限制, 只是 NK 跨越两个以上物理内存片时, 系统启动时会显示这个 OS 包跨越了多个物理内存片,认为 是个错误,但并不影响系统的执行与稳定性,因为系统启动 之时便会打开 MMU 而使用虚拟地址,从而看到连续的内存 空间。当然,如果内核自己都被放在了两个内存片上,那系 统应该就无法启动了。而其它保留起来的内存片是一般是给 驱动程序 DMA 用,应该保证它们在物理上的连续性,因为 DMA 是直接用物理地址的。CONFIG 段中以下几个需要格外注意:ROMS

6、TART ,它定义 ROM 的起始位置, 应该和 NK 片的起 始位置相同。ROMSIZE ,定义 ROM 的大小,应该和 NK 片的大小相同。 如果不需要NK。BIN文件,则可以不设这两个值。ROMWIDTH ,它只是定义 ROMIMAG 生成 ROM 包时如何 组织文件,而非其字面含义: ROM 的宽度,所以一般都应 该为 32COMPRESSION ,一般定义为 ON ,以打开压缩功能,从而 减小 BIN 文件的尺寸。AUTOSIZE ,一般应该设为 ON ,以使系统将定义给 ROM 但没有用掉的内存当做 RAM 使用,而提高 RAM 的使用率。 注意,如果 ROM 是 FLASH ,则

7、不能设为 ON ,因为 FLASH 不能当作 RAM 使用。ROMOFFSET ,它定义 OS 起始位置(即 ROMSTART )的 物理地址和虚拟地址的差值,有些 BSP 中并没有使用这个 定义。OEMAddressTable 及其他OEMAddressTable 用来初始化系统中各种设备的虚拟地址 与物理地址的对映关系。在我使用的 BSP 中,它是这样定 义并初始化的:typedef structULONG ulVirtualAddress;ULONG ulPhysicalAddress;ULONG ulSizeInMegs; AddressTableStruct;#define MEG(

8、A)(A - 1)>>20) + 1)const AddressTableStructOEMAddressTable = SDRAM_VIRTUAL_MEMORY,/ 虚拟地址PHYSICAL_ADDR_SDRAM_MAIN, / 物理地址MEG(SDRAM_MAIN_BLOCK_SIZE)/这段空间的大小,以M计,0,0,0;如例子所示, OEMAddressTable 为一个结构数组,每项的 第一个成员为虚拟地址,第二个成员为对应的物理地址,最 后一个成员为该段空间的大小。这个数组的最后一项必须全 部为 0 ,以示整个数组的结束。内核启动时会读取这个数组 的内容以初始化 MMU

9、 页表,启用 MMU ,从尔使程序可以 用虚拟地址来访问设备。当然, OEMAddressTable 中所用 到的每个物理地址及虚拟地址都需要在头文件中定义,每个BSP 中定义这些值的文件不尽相同, 所以, 在此不能说明具 体在哪个文件, 读者朋友可以参考具体 BSP 的文档及代码。 不连续内存的处理 如果内存在物理上是连续的,则 OEMAddressTable 中只需 要一项就可以完成对内存的地址映射。但如果 BSP 运行在 SDRAM 物理上不连续的系统上时, OEMAddressTable 中 需要更多的项来将 SDRAM 映射到连续的虚拟地址上, 当然 也可以将它们映射到不连续的虚拟地

10、址上,但似乎没有理由 那么做。而且,当其物理地址不连续时系统需要做更多的工 作。例如,我有这样一个系统: 32M SDRAM ,16M FLASH , SDRAM 在物理上不连续,被分成了 4 个 8M 的内存块,我 的 SDRAM 的使用情况如下图所示: CONFIG 。 BIB 文件的MEMORY 段如下所示:MEMORYRESERVED8000000000008000RESERVEDDRV_GLB8000800000001000RESERVEDCS89008001000000030000RESERVEDEDBG8004000000080000RESERVEDRAMIMAGERAM 818

11、00000 00800000 RAM 在这 32M的空间中,BSP保留了前0x80000字节,接下来是NK , 它占用了 0x940000 字节, 而且它跨越了两个内存片 ,这些和 其它 BSP 的设置都没有多大差别 ,接下来看 RAM 片,它只占 用了最后的 8M 空间 ,前面说过, 在这种物理内存不连续的系 统中, RAM 片不能跨越两个物理内存块,所以它被设计成 只占用该系统中的最后一个物理内存片,而其它两片则由 OEMEnumExtensionDRAM 在运行时刻报告给系统,该函 数的内容如下 : pMemSections0.dwFlags=0;pMemSections0.dwStar

12、t=(SDRAM_VIRTUAL_MEMORY+ 0x1000000);pMemSections0.dwLen=0x800000; pMemSections1.dwFlags=0;pMemSections1.dwStart=(SDRAM_VIRTUAL_MEMORY+ 0x0A00000);pMemSections1.dwLen=0x600000;return 2;这样 ,系统所有的内存都被激活 ,系统可用内存就变成了8+8+6=24M ,可以将 RAM 定义为这三片中的任意一片,而 在 OEMEnumExtensionDRAM 中报告其它两片。 但把 RAM 放在最后一片物理内存上有一个很大的好处,即如果 NK 变 大,例如编译一个 DEBUG 版的系统时,这时,只需要将 OEMEnumExtensionDRAM 中的内容注释掉, CONFIG.BIB 文件不用做任何改动, 系统就可运行, 只是在 MAKEIMG 时 会有一个警告说系统包太大,可能无法运行,但实际不会影 响系统的执行与稳定性,因为 NK 之后的那段内存并没有被 使用,正好被涨

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论