WINCE内存机制
来源:互联网 发布:angularjs引用js文件 编辑:程序博客网 时间:2024/06/04 19:11
一般在ARM架构的CPU上,物理地址都是统一编址的,寻址空间为4GB(32Bit CPU)。也就是说,针对一个ARM的处理器,它可以访问的物理空间是4GB。在WinCE中,ARM中的4GB物理地址空间将被映射为512MB的虚拟内存空间。 OEMAddressTable就是一个4GB物理地址空间到WinCE Kernel中的512MB虚拟地址空间的映射表。
在BSP中,会定义OEMAddressTable来描述系统中可访问的物理空间及对应的虚拟地址空间,还有大小。这个表会在WinCE系统开始启动的时候传给MMU,具体到BSP中应该是在OAL中的startup.s中,OEMAddressTable的起始地址会被放到r0寄存器中,然后就跳转到KernelStart里面,KernelStart会用OEMAddressTable完成MMU得初始化。当WinCE启动以后,就只能访问虚拟地址空间了。
举个例子,比如我们要开发一个Flash的驱动程序,那么首先我们知道这个flash所接的片选对应的物理起始地址是多少(假如是 0x60000000),大小是多少(假如是0x2000000)。如果我们要在WinCE中访问它,就必须为它定义一个虚拟地址(假如是 0x80000000),并添加到OEMAddressTable中,这样,我们才能在我们的驱动里面通过这个虚拟地址访问到flash。
虚拟地址不是随便定义的,WinCE中有规定,必须在0x80000000---0x9FFFFFFF。实际上WinCE创建了两套虚拟地址空间,一个是0x80000000---0x9FFFFFFF,是Cache Enabled。另一个是0xA0000000---0xBFFFFFFF,是Cache Disabled。有啥区别呢:
如果我们访问的这个空间只是一段内存空间(比如SDRAM),那么就可以用Cache Enabled的空间来访问,这样存取数据的速度会比较快,因为数据被保存在Cache中。
如果我们访问的这个空间是一个外设的地址,那么我们就要使用Cached Disabled的空间来访问,这样才能使CPU与外设同步。
可能说得有点绕,我的经验就是:只要是SDRAM,可以用Cache Enabled空间访问。如果是寄存器,就用Cache Disabled空间访问。
如何定义OEMAddressTable呢,如果安装了WinCE5.0或者6.0,那么提供的参考BSP中都已经有定义了,在BSP目录下搜索“OEMAddressTable”,一看代码就明白了,这里重复一下,格式如下:
虚拟地址 物理地址 大小
比如:
OEMAddressTable:
dd 0x80000000 0x60000000 0x2000000
dd 0 0 0
上面这个表定义了一个flash的物理地址到虚拟地址的映射,物理地址是0x60000000,虚拟地址是0x80000000,大小是32MB。OEMAddressTable最后必须以0结尾,表示OEMAddressTable结束
- WINCE内存机制
- WINCE 驱动中断机制
- WinCE 虚拟内存机制!
- wince 同步机制
- WINCE的内存配置
- wince内存分配
- WINCE的内存配置
- wince内存分配
- WINCE的内存配置
- Wince内存映射注意事项
- Wince内存映射
- wince 5.0 内存管理
- WINCE的内存配置
- winCE的内存管理
- wince内存配置
- WINCE的内存配置
- WINCE的内存配置
- wince内存配置
- :(
- Conquering the Most Difficult Problems in China and Asia — Ethan Soo in Agile Tour 2010 Hangzhou
- VMWare暂停后恢复时间不准
- 成分股
- WINCE下如何设置/删除/查询这些环境变量
- WINCE内存机制
- C#中string 类型赋值问题
- 面向过程与面向对象的区别
- 研发绩效考核按月还是按季度进行?
- ASP.NET中的Transfer传递页面。
- WINCE viewbin命令
- 把图片转成二进制证picturebox控件读取
- post提交页面
- 谈吐受人尊重的六个原则