6463|20

92

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince驱动从指定地址读取数据。 [复制链接]

  1. #define  READADDRESS  0x10000000

  2. DataAddr = (volatile BYTE *) VirtualAlloc(0,sizeof(BYTE),MEM_RESERVE, PAGE_NOACCESS);
  3.         if(DataAddr == NULL)
  4.          {
  5.                 RETAILMSG(1,(TEXT("DataReader::For s2440IOP: VirtualAlloc failed!\r\n")));
  6.         }
  7.         else {
  8.                 if(!VirtualCopy((PVOID)DataAddr,(PVOID)(READADDRESS),sizeof(BYTE),PAGE_READWRITE | PAGE_NOCACHE )) {
  9.                         RETAILMSG(1,(TEXT("DataReader::For s2440IOP: VirtualCopy failed!\r\n")));
  10.                }
  11.         }

  12. s2440MEM->rBWSCON = (s2440MEM->rBWSCON & ~(DWORD)(0xF<<8));// 8-bits ,no wait ,no UB/LB

  13. DWORD RED_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
  14. {
  15.         UINT i;
  16.         RETAILMSG(1,(TEXT("CODER: RED_Read\r\n")));
  17.         for(i=0;i<32768;i++)
  18.         {
  19.         ((BYTE *)pBuffer)[i] = * DataAddr;
  20.         }
  21.         return TRUE;
  22. }
复制代码

我这样写能否实现从地址0x10000000 读取数据?请赐教
此帖出自WindowsCE论坛

最新回复

祝大家……新年快乐。呵呵  详情 回复 发表于 2010-2-4 09:43
点赞 关注
 

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我这样写的出现错误。
CODER: RED_Read
Exception 'Data Abort' (4): Thread-Id=074a0002(pth=82784138), Proc-Id=00400002(pprc=82008308) 'NK.EXE', VM-active=07490002(pprc=82717e1c) 'readtest.exe'
PC=c0881618(datareader.dll+0x00001618) RA=c088160c(datareader.dll+0x0000160c) SP=d35cfbe8, BVA=d2730000
Exception 'Raised Exception' (-1): Thread-Id=074a0002(pth=82784138), Proc-Id=00400002(pprc=82008308) 'NK.EXE', VM-active=07490002(pprc=82717e1c) 'readtest.exe'
PC=c003b7b0(k.coredll.dll+0x0001b7b0) RA=802384c8(kernel.dll+0x000064c8) SP=d35cf484, BVA=ffffffff
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我的BSP中要
VirtualCopy((PVOID)v_pIOPregs, (PVOID)(S3C2450_BASE_REG_PA_IOPORT >> 8), sizeof(S3C2450_IOPORT_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)

还没分析S3C2450_BASE_REG_PA_IOPORT >> 8这条语句,为什么要移位,但是如果你的那段代码不行的话也进行移位试下。

这种方法应该是没有问题的。
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 
加了PAGE_PHYSICAL 这个标志就要移位,不加就不用移位
此帖出自WindowsCE论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 
  1. DWORD RED_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
  2. {
  3. //        UINT i;
  4. //        BYTE buf[32768];
  5.         RETAILMSG(1,(TEXT("CODER: RED_Read\r\n")));
  6. //        memcpy(pBuffer, &g_DataReaderCode, 1);
  7. //        for(i=0;i<32768;i++)
  8. //        {
  9. //                buf[i] = * DataAddr;
  10. //        }
  11. //        memcpy(pBuffer,buf,sizeof(buf));
  12.         return TRUE;
  13. }
复制代码

我改成这样,就没有错误了。
串口输出:
CODER: RED_Read
CODER: RED_Read
CODER: RED_Read
CODER: RED_Read
CODER: RED_Read
CODER: RED_Read
CODER: RED_Read
CODER: RED_Read
CODER: RED_Read
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
4.2版本的BSP不需要移位,5.0版的BSP 需要移位。
此帖出自WindowsCE论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

7
 
我用的wince 6.0的。
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 
在驱动中建议使用MmMapIoSpace()
此帖出自WindowsCE论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

9
 
晕啊,谁给赐教一下。都回家了吗  ??
此帖出自WindowsCE论坛
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(初级)

10
 
你只alloc了一个byte ??? sizeof(BYTE)
那你读第二个后 当然就出错了。
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
我是从固定的地址读的,就是一直从0x10000000这个地址读。不用0x10000001地址的数据
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
我顶,
此帖出自WindowsCE论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

13
 
help me
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 
#define  READADDRESS  0x10000000 属于物理地址
或者用虚拟地址, 或者加PAGE_PHYSICAL标志。
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 rushonin 的回复:
#define? READADDRESS? 0x10000000 属于物理地址
或者用虚拟地址, 或者加PAGE_PHYSICAL标志。

VirtualCopy((PVOID)DataAddr,(PVOID)(READADDRESS),sizeof(BYTE),PAGE_READWRITE | PAGE_NOCACHE )
这里已经转换成虚拟地址了 。
难道有错?寄存器就是用的这个方法
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

16
 
READADDRESS 定义的值 是物理地址, 你不加PAGE_PHYSICAL的话,READADDRESS  就该定义成虚拟地址,用OEMAddressTable映射后,地址应该在0xA0000000以上。
或者你加上PAGE_PHYSICAL,相应的 READADDRESS  物理地址>>8.
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 15 楼 rushonin 的回复:
READADDRESS 定义的值 是物理地址, 你不加PAGE_PHYSICAL的话,READADDRESS? 就该定义成虚拟地址,用OEMAddressTable映射后,地址应该在0xA0000000以上。
或者你加上PAGE_PHYSICAL,相应的 READADDRESS? 物理地址>>8.
学习,学习,呵呵…
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

18
 
WINCE 5.0 中超出512M就需要移位
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

19
 
帮顶一下,我也能对寄存器进行操作,但是具体的内存地址就不能操作了
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

20
 
PAGE_PHYSICAL 终于知道这个标志什么意思,怎么用了,呵呵。
感谢rushonin ,Veabol、…………
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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