5885|15

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE6.0中应用中使用物理地址 [复制链接]

做应用的需要一片固定的内存,我在Config.bib中划好,在驱动里增加了MmIOMapSpace和MmIOUnMapSpace以及对应的IOCTL,在驱动内部测试,这片内存可以正常访问,map以及unmap。
我用IOCTL为应用返回这片内存的物理及虚拟地址,为什么在应用中使用该虚拟地址操作这片内存就会Data Abort??



  1.         // Request Application Memory
  2.         if ( !DeviceIoControl(hCamDrv, IOCTL_VDC_REQUEST_APPLICATION_MEMORY, &ApplicationMemoryArgs, sizeof(VDC_APPLICATION_MEMORY_ARGS), NULL, 0, &dwBytes, NULL) )
  3.         {
  4.                 RETAILMSG(CAMTEST_ERR,(L"[CAMTEST:ERROR] IOCTL_VDC_REQUEST_APPLICATION_MEMORY Failed\n"));
  5.                 goto CleanUp;
  6.         }
  7.         else
  8.         {
  9.                 printf("[CAMTEST:INFO]        APPLICATION MEMORY: Phisical Address = 0x%08x \r\n", ApplicationMemoryArgs.dwPhysicalAddress);
  10.                 printf("[CAMTEST:INFO]        APPLICATION MEMORY: Virtual  Address = 0x%08x \r\n", ApplicationMemoryArgs.pVirtualAddress);
  11.                 printf("[CAMTEST:INFO]        APPLICATION MEMORY:             Capacity = %d \r\n", ApplicationMemoryArgs.dwCapacity);

  12.                 printf("        Test Access to Application Buffer:\r\n");
  13.                 tmp = ApplicationMemoryArgs.pVirtualAddress;
  14.                 printf("                Before Access: %d \r\n", *tmp);
  15.                 *tmp = 3;
  16.                 //memset(ApplicationMemoryArgs.pVirtualAddress, 3, ApplicationMemoryArgs.dwCapacity);
  17.                 printf("                 After Access: %d \r\n", *tmp);
  18.         }

复制代码


Physical Address 和 Virtual Address 以及 Capacity 都可以正常打印出来。

最新回复

哦,看到MSDN上也有解释。 多谢楼上二位  详情 回复 发表于 2010-5-13 12:09
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
看样子只能使用VirtualCopyEx了
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
wince 6.0 不能在应用中这样操作的吧。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 gooogleman 的回复:
wince 6.0 不能在应用中这样操作的吧。


是啊,如果是CE5.0,是可以这样操作的

但是CE6.0的驱动结构发生了变化,应用不能再直接访问硬件,必须通过驱动才可以的
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
是啊,翻之前的帖子,hjb大哥有如下解决方案:
http://www.cnblogs.com/we-hjb/archive/2010/02/25/1673815.html
使用VirtualCopyEX来映射。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

6
 
证明该方法可行!已经可以在应用中直接操作这块内存了。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
WinCE 6.0 只是不能用VirtualCopy 来操作了,提供了另外的VirtualCopyEx增强版函数。
 
 
 

回复

123

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 5 楼 lbqhope 的回复:
证明该方法可行!已经可以在应用中直接操作这块内存了。

呵呵,不错啊。
感觉这么用非常方便。

很多5.0上的程序,可以直接移植过来了,而不需要做太多的改动。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 sunrain_hjb 的回复:
引用 5 楼 lbqhope 的回复:
证明该方法可行!已经可以在应用中直接操作这块内存了。

呵呵,不错啊。
感觉这么用非常方便。

很多5.0上的程序,可以直接移植过来了,而不需要做太多的改动。


那是相当方便,哈哈,谢谢h大哥的代码。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
WINCE 6.0禁止这样操作的.

通过驱动才行.
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

11
 
6.0不允许直接操作物理地址
  得通过驱动来实现
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

12
 
帮你顶
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 7 楼 sunrain_hjb 的回复:
引用 5 楼 lbqhope 的回复:
证明该方法可行!已经可以在应用中直接操作这块内存了。

呵呵,不错啊。
感觉这么用非常方便。

很多5.0上的程序,可以直接移植过来了,而不需要做太多的改动。


if(dwPhyBaseAddress&0xFFF)
{
          return NULL;
}

h大哥,代码里这个是起和作用啊
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 12 楼 lbqhope 的回复:
引用 7 楼 sunrain_hjb 的回复:
引用 5 楼 lbqhope 的回复:
证明该方法可行!已经可以在应用中直接操作这块内存了。

呵呵,不错啊。
感觉这么用非常方便。

很多5.0上的程序,可以直接移植过来了,而不需要做太多的改动。





if(dwPhyBaseAddress&0xFFF)
{
  return NULL;
}

h大哥,代码里这……



判断 是否已
4KB边界对齐方式分配内存页
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

15
 
恩,就是对齐的问题。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

16
 
哦,看到MSDN上也有解释。
多谢楼上二位
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表