阅读:2335回复:19
virtual address --〉physical address?
请问各位大侠,在wince 的驱动里如何将虚拟地址装换成物理地址,如win2k或winxp下的MmGetPhysicalAddrss()。
谢谢。 |
|
|
沙发#
发布于:2005-01-19 20:13
请问兄弟用的是什么类型的平台?
|
|
|
板凳#
发布于:2005-01-20 08:36
x86 + wince5.0
|
|
|
地板#
发布于:2005-01-20 08:42
为什么要把虚拟转为物理呢,就是你有物理地址在ce下也是不能用的呀,我试过直接用物理地址操作,ce出现了异常
|
|
地下室#
发布于:2005-01-20 08:51
不知兄弟做如此转换为何用?是做DMA传输之类的吗?
|
|
|
5楼#
发布于:2005-01-20 09:47
但是就是dma也不能用物理地址呀,在ce的内存管理方式就不允许你使用物理地址
|
|
6楼#
发布于:2005-01-20 09:55
用户被禁言,该主题自动屏蔽! |
|
7楼#
发布于:2005-01-20 10:12
但是就是dma也不能用物理地址呀,在ce的内存管理方式就不允许你使用物理地址 兄弟可能误会我的意思了,我是说:在进行DMA传输的时候,可能需要将内存缓冲区的地址转换成总线相关的物理地址,这样DMA控制器才能访问这个缓冲区。 |
|
|
8楼#
发布于:2005-01-21 08:41
对,还是wwei_wang大侠明白我的用意,我就是需要知道物理地址,给DMA控制器传数据用.
望有知道解决方法的高手们指教. 在WINDOWS平台下有MmGetPhysicalAddrss()可以完成相应功能,可是在WINCE下不知道有什么替代函数.我看到有一个OALVAtoPA(),可不知道怎么用? |
|
|
9楼#
发布于:2005-01-21 09:03
其实你也可以分配一个commonbufer来进行dma传输。
|
|
|
10楼#
发布于:2005-01-21 09:04
其实你也可以分配一个commonbuffer来进行dma传输。
|
|
|
论坛版主
|
11楼#
发布于:2005-01-21 15:04
AllocPhysMem()
|
|
12楼#
发布于:2005-01-22 11:53
谢谢,我的用法不是这样的,我的虚拟地址只能在用户层得到,不是在下面分配的.
奇怪为什么ce下没有类似的函数 :( |
|
|
13楼#
发布于:2005-01-24 08:34
谢谢,我的用法不是这样的,我的虚拟地址只能在用户层得到,不是在下面分配的. 我也没找到你说的那个函数。但是用在下驱动里面分配共享缓冲区的方法其实也是一样的,你只要实现用户缓冲区和共享缓冲区之间的拷入拷出就行了。 |
|
|
14楼#
发布于:2005-01-25 17:06
那效率很低啊!
|
|
|
15楼#
发布于:2005-01-25 19:20
效率不低啊,应该能满足要求的!
|
|
|
16楼#
发布于:2005-01-26 12:12
那效率很低啊! 你做dma传输平均每秒钟的吞吐量是多少?每次传输的吞吐量又是多少? |
|
|
17楼#
发布于:2005-01-26 13:11
AllocPhysMem()可以得到一段内存的物理地址和进程内的虚拟地址
如果需要对这个虚拟地址进行处理,以便在应用程序或驱动里访问,可以用VirtualAlloc/Copy()和MapPtrToProcess()这些函数去进行处理. |
|
|
18楼#
发布于:2005-01-29 10:29
我想知道显卡的显存基地址,不知如何得到???
要显存的物理地址!!!! |
|
|
论坛版主
|
19楼#
发布于:2005-01-31 14:30
pc的显存物理地址是固定的,0xa0000开始,中间分成了几个部分,字符模式一段,图像模式一段(好像0xa0000-0xaffff是字符模式,0xb0000到0xbffff是图形模式)单色模式一段,彩色模式一段,具体记不太清了,你可以找x86的汇编的书查,基本都有的
|
|