wdsjmg
驱动牛犊
驱动牛犊
  • 注册日期2001-12-03
  • 最后登录2005-07-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2748回复:13

在CE 3.0下如何对端口地址进行直接访问?多谢!!

楼主#
更多 发布于:2003-12-18 11:08
不知道能否在CE3.0或更高版本中,直接端口,我C标准库的函数好象是不支持的。多谢大家!!!(我用的是EVC3.0)

[编辑 -  12/18/03 by  wdsjmg]
angeon
禁止发言
禁止发言
  • 注册日期2003-01-09
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1416分
  • 威望7080点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-19 09:56
用户被禁言,该主题自动屏蔽!
wdsjmg
驱动牛犊
驱动牛犊
  • 注册日期2001-12-03
  • 最后登录2005-07-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-19 10:25
多谢帮助!
我已经调用了READ/WRITE_PORT_UCHAR/USHORT/ULONG,它好象在POCKET 2000下不能编译的,我没有在那里发现必需的CEDDK.LIB头文件,改变成POCKET 2002环境后,发现可以调用该函数,但是始终编译不过去,后来发现在POCKET 2002中没有发现CEDDK.LIB的链接库。我不知道为什么找不到该链接库,问题出在了那里,请指教,多谢了。

编译错误提示如下:
CFTestDlg.obj : error LNK2019: unresolved external symbol WRITE_PORT_USHORT referenced in function \"protected: void __cdecl CCFTestDlg::OnButton1(void)\" (?OnButton1@CCFTestDlg@@IAAXXZ)
ARMRel/CFTest.exe : fatal error LNK1120: 1 unresolved externals
angeon
禁止发言
禁止发言
  • 注册日期2003-01-09
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1416分
  • 威望7080点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-19 10:48
用户被禁言,该主题自动屏蔽!
angeon
禁止发言
禁止发言
  • 注册日期2003-01-09
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1416分
  • 威望7080点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-19 11:00
用户被禁言,该主题自动屏蔽!
wdsjmg
驱动牛犊
驱动牛犊
  • 注册日期2001-12-03
  • 最后登录2005-07-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-19 11:37
是我那里做错了么?
在CE下没有KERNEL和APP之分的,那些函数是可以在APP中使用的。
不过我很奇怪,我这里实现的有什么问题么?
我刚开始是在POCKET 2000下调用的,哪个环境下面好象根本不支持这些函数。后来更改到POCKET 2002环境,可以调用了,但是出现了我刚才提到的问题。我查找调用那些函数需要链接的头文件和链接库,发现在2002的头文件存在,但是链接库是没有的。不知道是为什么???是我的EVC3。0安装有问题,还是少了什么东西?
多谢了,另外你有QQ么?可以方便联系;)
angeon
禁止发言
禁止发言
  • 注册日期2003-01-09
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1416分
  • 威望7080点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-19 13:01
用户被禁言,该主题自动屏蔽!
angeon
禁止发言
禁止发言
  • 注册日期2003-01-09
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1416分
  • 威望7080点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-19 13:03
用户被禁言,该主题自动屏蔽!
joyfly
驱动小牛
驱动小牛
  • 注册日期2002-07-02
  • 最后登录2009-09-17
  • 粉丝0
  • 关注0
  • 积分319分
  • 威望32点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-19 13:05
这些函数都可以找到源代码,在 %_WINCEROOT%\\Public\\Common\\Oak\\Drivers\\CEDDK\\Ddk_io.c.
比如:
VOID
WRITE_PORT_ULONG(
    PULONG  Port,
    ULONG   Value
    )
{
#if defined(x86)    
  __asm {
    mov         dx, word ptr Port
    mov         eax, Value
    out         dx, eax
  }
#else
    *(volatile PULONG const)Port = Value;
#endif
}

所以,问题的关键不在于怎么样才能调用这个函数,而在于Port的地址对不对,是不是合法的,可以访问的.
CE下当然后KERNEL和APP之分,APP只有USER权限,不能直接访问物理地址.通过这些代码我们可以看到,WRITE_PORT_ULONG并没有做权限切换,也不会验证你输入的port参数的地址是否正确,它只是简单的赋值.所以如果你想在APP里正确的使用,你必须把PORT的物理地址通过MmMapIoSpace()或VirtualAlloc()/VirtualCopy()映射成虚拟地址,这样APP才有权限去读写.

所以我想你也不用再去找什么LIB和DLL了,JUST DO THIS:
*(volatile PULONG const)Port = Value;
www.cnemb.com
wdsjmg
驱动牛犊
驱动牛犊
  • 注册日期2001-12-03
  • 最后登录2005-07-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-12-19 13:50
多谢你的帮助:)
不过我发现了另外的问题,POCKET 2000/2002 ARM环境下,好象还不支持VirtualCopy()函数,就更不用提MmMapIoSpace()了。HELP里面好象只提到了VirtualAlloc,VirtualFree, VirtualProtect, VirtualQuery四个函数,因此我还是不知道该怎么把系统端口的内容怎么影射到AP中。多谢指教。

[编辑 -  12/20/03 by  wdsjmg]
angeon
禁止发言
禁止发言
  • 注册日期2003-01-09
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1416分
  • 威望7080点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-22 09:04
用户被禁言,该主题自动屏蔽!
wdsjmg
驱动牛犊
驱动牛犊
  • 注册日期2001-12-03
  • 最后登录2005-07-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-01-13 16:59
我要进行对系统内存的地址影射,就必须知道指定设备端口I/O ADDRESS具体对应的物理地址,但是我得不到该物理地址。
我需要访问的好象是PCMCIA bus,I/O端口是0x1f0,ARM得处理器,不知道我该怎么得到该端口的具体物理地址,请指教,多谢了。
icefly_x
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2006-02-07
  • 粉丝0
  • 关注0
  • 积分119分
  • 威望16点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-05-08 10:15
你将ceddk.lib的路径指到你的工程目录下(那里有)这样我想你就可以调用了
tony221
驱动牛犊
驱动牛犊
  • 注册日期2001-12-03
  • 最后登录2013-04-16
  • 粉丝0
  • 关注0
  • 积分187分
  • 威望61点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-05-08 14:02
READ_PORT_UCHAR/USHORT/ULONG
WRITE_PORT_UCHAR/USHORT/ULONG
只对X86有用,不能在ARM的处理器上使用
游客

返回顶部