5066|15

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

流驱动暴露的服务接口,如果不借助系统的API,应用程序如何直接调用。 [复制链接]

    流驱动加载后,其他驱动或上层应用程序如何直接调用它的接口函数,而不必使用API的CreateFile,writeFile,IOControl进行操作。
    例如导出函数
PXA_STATUS_T I2C_WriteData(UINT8 ucSlaveAddr,
                           UINT8 *pucBytesBuf,
                           UINT32 ulBytesCount,
                           BOOL bSendStopFlag,
                           PXA_I2C_PRIORITY_LEVEL_T enPriorityLevel)
通常的流驱动是调用系统API WriteFile来间接调用writeData,如果要直接调用writedata该如何实现那?

最新回复

没人顶贴了?还有其他答案吗?  详情 回复 发表于 2009-8-20 08:45
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
为什么要直接调用呢?
如果是wince5及其以前的版本,你可以用loadlibrary+getprocaddress的方法做,这样做不规范。
尽量用系统调用吧。
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
I2C 驱动啊!


你是不是搞的复杂了点?


我估计你把应用层的一些东西做到驱动里了;


如果能重新部署一下,在驱动中的功能应该是单一的;


一些逻辑操作应该放到应用层来做,I2C 驱动只负责发送数据,不需要知道数据干什么。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
LZ很奇怪
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
驱动层就是驱动层
应用层就是应用层。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 1 楼 rushonin 的回复:
为什么要直接调用呢?
如果是wince5及其以前的版本,你可以用loadlibrary+getprocaddress的方法做,这样做不规范。
尽量用系统调用吧。

您说的这种方法是加载本地DLL文件时用的方法吧,可是驱动的DLL已经在系统启动是加载过了,而且不在本地目录,在windows目录下。也可以这样做吗,wince5.0和wince6.0在这方面的做法是相同的。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 2 楼 zaodt 的回复:
I2C 驱动啊!


你是不是搞的复杂了点?


我估计你把应用层的一些东西做到驱动里了;


如果能重新部署一下,在驱动中的功能应该是单一的;


一些逻辑操作应该放到应用层来做,I2C 驱动只负责发送数据,不需要知道数据干什么。


没办法,驱动程序是别人提供的,如果没有合适的调用方法我就只好自己重写驱动了。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
楼主在操作什么器件啊,我最近也在操作一个 I2C 接口的 FM Radio ,驱动和应用都做。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 zaodt 的回复:
楼主在操作什么器件啊,我最近也在操作一个 I2C 接口的 FM Radio ,驱动和应用都做。

操作EEPROM。


TARGETLIBS=\
    $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
    $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib \
    $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\I2C_DRV_$(_TGTSOC_PFX).lib  \
    $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\ost_$(_TGTSOC_PFX).lib  \
    $(_TARGETPLATROOT)\lib\$(_CPUDEPPATH)\clkmgr_$(_TGTSOC_PFX).lib\
    $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\runtime_context_drvapp_stub_$(_TGTSOC_PFX).lib  \
    $(_TARGETPLATROOT)\lib\$(_CPUDEPPATH)\$(_TGTPLAT_PFX)_MFP.lib

这是sources文件里的部分内容,有什么可以借鉴的东西吗?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 
是 ATMEL 公司的 AT24C 系列的吗?


这个很多人都做过啊,没有遇到什么特别的问题;

直接用标准的流驱动做即可;

I2C 可以采用中断方式,也可以采用查询方式(要简单些);


然后在应用程序中:

CreateFile

WriteFile

ReadFile

CloseFile


楼主,看来你把简单的问题搞的复杂了。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
开机自动加载的驱动,就只能用标准API做了。
楼主为什么要绕过设备管理器呢?有什么特殊需求吗?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 9 楼 zaodt 的回复:
是 ATMEL 公司的 AT24C 系列的吗?


这个很多人都做过啊,没有遇到什么特别的问题;

直接用标准的流驱动做即可;

I2C 可以采用中断方式,也可以采用查询方式(要简单些);


然后在应用程序中:

CreateFile

WriteFile

ReadFile

CloseFile


楼主,看来你把简单的问题搞的复杂了。


这个驱动是我们公司外包的,他的很多驱动程序都调用了这个函数接口,他们这样写可能是为了自己的驱动程序调用方便。
如果应用程序不能直接调用的话,那我只能把驱动改为标准流接口了。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 10 楼 rushonin 的回复:
开机自动加载的驱动,就只能用标准API做了。
楼主为什么要绕过设备管理器呢?有什么特殊需求吗?


他的init函数是标准的流驱动,所以我觉得系统启动的时候这个DLL也被加载了,远程工具观察注册表的active域确实有I2C的内容,线程观察NK.EXE下也有这个I2C.dll。

应为这个函数还被其他驱动调用,他们这样做是为了其他驱动程序的调用方便。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(中级)

14
 
那你是要扩展这个驱动的功能,又不影响其它调用?
你可以在deviceIocontrol中实现你的新功能,或者封装一个新的驱动,底层通讯调用i2c驱动,或者把与通讯无关的事情转到应用层做。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 rushonin 的回复:
那你是要扩展这个驱动的功能,又不影响其它调用?
你可以在deviceIocontrol中实现你的新功能,或者封装一个新的驱动,底层通讯调用i2c驱动,或者把与通讯无关的事情转到应用层做。

多谢,看形势只能改驱动了。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

16
 
没人顶贴了?还有其他答案吗?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表