7216|24

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于手持设备锂电池管理驱动的问题 [复制链接]

大家好,我现在做一款手持机,锂电池供电;了解了一下wince的电源管理驱动,目前我的理解是在BatteryPDDGetStatus函数里填充一下电池结构信息就可以了,这样MDD层就可以根据该结构提供电量查看,电量报警等功能;但是我在调试的时候却发现BatteryPDDInitialize根本没有执行(没有调试信息……),开发板上的BSP把这块屏蔽了,我在platform.bib和platform.reg里都加上了驱动信息,但是还是没有执行BatteryPDDInitialize,大家帮看一下为什么?有过开发锂电池驱动的经验的朋友帮帮忙了,谢谢先~~~~~~

最新回复

重新build and sysgen一下可以了,以前我都是build and sysgen current BSP,再次谢谢各位热心的朋友!~~~  详情 回复 发表于 2010-1-29 14:32
点赞 关注

回复
举报

60

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
先在WINCE下看看注册表中有没有这个驱动加载。
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
BuileIn里有,Active里没有!~~说明没有成功加载吧
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
赞助
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
DEF文件定义的导出函数,注册表的Prefix,以及MDD下的函数都正确吗?
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
;reg文件
;---------Battery Driver---------------

[HKEY_LOCAL_MACHINE\System\Events]
    "SYSTEM/BatteryAPIsReady"="Battery Interface APIs"

; END HIVE BOOT SECTION

; These registry entries load the battery driver.  The IClass value must match
; the BATTERY_DRIVER_CLASS definition in battery.h -- this is how the system
; knows which device is the battery driver.  Note that we are using
; DEVFLAGS_NAKEDENTRIES with this driver.  This tells the device manager
; to instantiate the device with the prefix named in the registry but to look
; for DLL entry points without the prefix.  For example, it will look for Init
; instead of BAT_Init.  This allows the prefix to be changed in the registry (if
; desired) without editing the driver code.
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Battery]
   "Prefix"="BAT"
   "Dll"="battdrvr.dll"
   "Flags"=dword:0x08 ;DEVFLAGS_NAKEDENTRIES
   "Order"=dword:0
   "IClass"="{DD176277-CD34-4980-91EE-67DBEF3D8913}"



;battdrvr文件
LIBRARY         BATTDRVR
; DESCRIPTION        Battery MDD/sample driver

EXPORTS Init
        Deinit
        Open
        Close
        Read
        Write
        Seek
        PowerDown
        PowerUp
        IOControl
谢谢Veabol提醒,def文件好像不对,我改下试试;另外sourse里的内容如下

!if "$(BSP_NOBATTERY)" == "1"
SKIPBUILD=1
!endif

WINCEOEM=1

TARGETNAME=battdrvr
RELEASETYPE=PLATFORM
TARGETTYPE=DYNLINK

DEFFILE=battdrvr.def
DLLENTRY=DllMain

TARGETLIBS=$(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
           $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib \

SOURCELIBS=$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\battdrvr_lib.lib \

那个DllMain在battif.c里不存在,这点好像也有点问题
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
下面是改改后的.def文件

LIBRARY         BATTDRVR
; DESCRIPTION        Battery MDD/sample driver

EXPORTS
  BatteryPDDInitialize
        BatteryPDDDeinitialize
        BatteryPDDGetStatus
        BatteryPDDGetLevels
        BatteryPDDPowerHandler
        BatteryPDDResume
        BatteryPDDSupportsChangeNotification
        LockBattery
        UnlockBattery
       
        ;BatteryPDDOpen
        ;Close
        ;Read
        ;Write
        ;Seek
        ;PowerDown
        ;PowerUp
        ;IOControl
用dumpbin工具查看函数都导出了,但是BatteryPDDInitialize还是没有执行,MDD应该调用它的啊?查看注册表,Active下面依然没有Bat
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
原来的DEF是对的,DllMain是在MDD层呢,你这么改了肯定是不行。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
改回来依然不行,不知道错在哪儿了?reg.bib.source,文件好像都没有问题
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
网上找了点资料,发现该目录C:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\BATTDRVR下的实例代码SOURCE
文件定义TARGET=battdrvr
TARGETNAME=$(TARGET)_lib
TARGETTYPE=LIBRARY   说明该驱动是个静态库吧?如何把他变成DLL呢?有必要变成DLL吗?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

11
 
DLLENTRY=DllMain 这么写没错。

source文件中,没有加上写要编译的c文件啊。。

如:
SOURCES=                         \
        battif.c                \
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

12
 
def文件,原先写的没错。


LIBRARY         BATTDRVR
; DESCRIPTION        Battery MDD/sample driver

EXPORTS Init
        Deinit
        Open
        Close
        Read
        Write
        Seek
        PowerDown
        PowerUp
        IOControl
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
SOURCES= \
battif.c \
这句是有的;在wince下.lib和.dll有什么区别呢?问的问题比较弱,呵呵
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

14
 
如果你是在用WinCE6.0,可以参考C:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\DRIVERS\BATTDRVR下的代码,根据自己的平台的修改一下即可。
另外,BSP中一般只需实现PDD层,编译成库,最后和系统提供的MDD层,一起编译成DLL,你看一下source文件就清楚了。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

15
 
赞助一个,留案待查,呵呵…
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 13 楼 sunrain_hjb 的回复:
如果你是在用WinCE6.0,可以参考C:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\DRIVERS\BATTDRVR下的代码,根据自己的平台的修改一下即可。
另外,BSP中一般只需实现PDD层,编译成库,最后和系统提供的MDD层,一起编译成DLL,你看一下source文件就清楚了。

我用的是5.0,一定要改成Dll才成吗?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 15 楼 lth93 的回复:
引用 13 楼 sunrain_hjb 的回复:
如果你是在用WinCE6.0,可以参考C:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\DRIVERS\BATTDRVR下的代码,根据自己的平台的修改一下即可。
另外,BSP中一般只需实现PDD层,编译成库,最后和系统提供的MDD层,一起编译成DLL,你看一下source文件就清楚了。

我用的是5.0,一定要改成Dll才成吗?

难不成你用的是LIB?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

18
 
是这样的,我发现C:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\BATTDRVR目录下的sources文件TARGET=battdrvr
TARGETNAME=$(TARGET)_lib
TARGETTYPE=LIBRARY
这个意思是MDD层可以做成lib,而PDD层要做成DLL?
这个有问题吗?我是不是应该把该目录下的文件全部拷贝到platform下?另外这个sources文件需要改动吗?现在我的active键里没有battdrv是不是这的问题?参考了一下eeworld上的http://topic.eeworld.net/u/20100128/11/f2976622-3e04-4112-ae5c-9d169e10d74f.html这个帖子,还是没有完全明白
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

19
 
赞助一个,留案待查,呵呵…

过年回来也要做这个工作了
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

20
 
MDD层仍然是LIB,PDD层做成DLL,PDD层的SOURCE要链接MDD层的LIB,因为系统首先访问的驱动函数是在MDD层的,然后由MDD层的函数再调PDD层的,你可以看下MDD层的代码就明白了。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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