关于WINCE下电源管理问题,请教各位

wangxin_801115 2009-02-10 10:40:59
加精
1、我的电源管理用到两个表:充电表(即当外接电源插入时调用)
放电表(即用电池时调用)
但我发现放电时电池的放电曲线是类似线性的下降
可是充电时充电曲线不是线性的,而是电压上升了一会就下降了一会,类似梯形方波
不知道各位做过电源管理的是怎么处理这里的?是不是也是遇到我这种问题

2、我已经把 “控制面板”->“电源”->“方案”中的“将状态切换为挂起”、
写死为“从不”
所以我的PDA需要深度休眠只能通过按休眠按键(我这里定义的深度休眠是指CPU休眠,而不是背光休眠)

但是偶尔会出现过了一段时间背光先关掉了,然后自动进入CPU休眠状态,这时只能通过按休眠键才唤醒,这是我不希望看到的

不知道为什么会出现这个现象
...全文
1979 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
f20761973 2009-02-15
  • 打赏
  • 举报
回复
uiopp
wangxin_801115 2009-02-13
  • 打赏
  • 举报
回复
各位:
其实我的BSP中的电池驱动battif.c是没有对深度休眠进行设置的,
只有在pmgr.c中对深度休眠进行了设置:
pSlpParams->PWER = 0x00000000u; // PMGR_PWER_DFLT; // Wake for RTC alarm or GPIO1
pSlpParams->PRER = 0u;// PMGR_PRER_DFLT;
pSlpParams->PFER = 0u;// PMGR_PFER_DFLT;
pSlpParams->PKWR = 0x100u; // PMGR_PKWR_DFLT;
所以当需要深度休眠时会调用pmgr.c中的OEMPowerOff函数

而在battif.c中只有当按键休眠时和低电休眠时才会调用GwesPowerOffSystem();,这个GwesPowerOffSystem();函数又会调用OEMPowerOff函数使系统休眠

battif驱动是分层的
他的上层在D:\WINCE420\PUBLIC\COMMON\OAK\DRIVERS\BATTDRVR\battdrvr.c中

但是我觉得我现在的自然进入深度休眠的问题与这个没关系
gooogleman 2009-02-12
  • 打赏
  • 举报
回复
楼上怎么搞的,这么会被封杀ID的
hzdysymbol 2009-02-11
  • 打赏
  • 举报
回复
把系统里的所有别的驱动拿掉看看,只留Lcd,backlight,然后再看看系统会不会有问题?
没有问题再一个个加回去

再一个就是要想办法把这问题复制出来,这样就容易查了

因为我对4。2不熟悉,所以也没有什么特别好的思路
bestboy1 2009-02-11
  • 打赏
  • 举报
回复
路过。
hzdysymbol 2009-02-11
  • 打赏
  • 举报
回复
4.2下面的PM没有研究过,我说的是5.0及以上的
在5.0及以上的版本中GwesPowerOffSystem()一般已经不再使用了
5.0下PM的代码在public/common/oak/drivers/pm下面吧,你可以在4.2下面查查看看,5.0下面最终在Release目录下面会有一个pm.dll,这就是最终生成的PM驱动
lzj444 2009-02-11
  • 打赏
  • 举报
回复
很好
tedwe 2009-02-11
  • 打赏
  • 举报
回复
路过 学习
Larry_Liang_cn 2009-02-11
  • 打赏
  • 举报
回复
是不是有什么地方调用了SetSystemPowerState
这个函数也可以让系统进Suspended。
SetSystemPowerState (NULL,POWER_STATE_SUSPEND,POWER_FORCE) or
SetSystemPowerState (NULL,POWER_STATE_OFF, POWER_FORCE) or
SetSystemPowerState (NULL,POWER_STATE_CRITICAL, POWER_FORCE) or
SetSystemPowerState (L"suspend", 0, 0);
调这些都有这种可能。

楼主可以按照hzdysymbol的建议,看下PM的log
在如果是PM要求进的Suspeded的话,应该在\public\common
\oak\drivers\pm\pdd\pda下的Platform.cpp的
PlatformSetSystemPowerState函数里的PowerOffSystem前能看到
log。但不知楼主的PM策略是不是使用的Public下的PDA这一套



wangxin_801115 2009-02-11
  • 打赏
  • 举报
回复

我现在在我的BSP下,
调用GwesPowerOffSystem这个函数之前的地方

添加了一条打印信息

但是发现, 自然进入休眠状态时并不打印这条信息

说明应该不是BSP下这个GwesPowerOffSystem函数被意外调用了
(在我的BSP下只有两个地方调用了这个函数:一个是在按键休眠处,另一个是低电处理那里)

可是如果是系统异常调用了GwesPowerOffSystem或者OEMPowerOff这两个函数也查不到啊??

hzdysymbol大侠有什么好方法吗??
wangxin_801115 2009-02-10
  • 打赏
  • 举报
回复
ding
wangxin_801115 2009-02-10
  • 打赏
  • 举报
回复
PM的Debug Message?请问在Public下的哪里

GwesPowerOffSystem();这个函数最后也会调用OEMPowerOff的吧?

这个函数是我主动调用的(在按键休眠和低电休眠里面),

我现在能做的只能是在这个GwesPowerOffSystem();函数前加一条打印信息,

其他还有哪个函数会调用OEMPowerOff呢 ??

我的是WINCE42版本的,不知道电源管理这块是不是跟WINCE50下的不一样?

更艰难的问题是:这种情况不是每次开机等待就会出现的,这种情况出现也很偶然,想查的时候它就不出现





hzdysymbol 2009-02-10
  • 打赏
  • 举报
回复
OEMPowerOff一般是由PM代码来调用的
可以把PM的Debug Message打开来看一看,相关代码在Public下面
wangxin_801115 2009-02-10
  • 打赏
  • 举报
回复
充电放电表问题已经解决了
但是系统自动休眠还是没找到问题出在哪
wangxin_801115 2009-02-10
  • 打赏
  • 举报
回复
ding
wangxin_801115 2009-02-10
  • 打赏
  • 举报
回复
看打印信息
是当背光休眠时很长时间后调用了pmgr.c中的:OEMPowerOff函数
但是现在找不到是哪里调用了这个函数
hzdysymbol 2009-02-10
  • 打赏
  • 举报
回复
充放电曲线可以向电池供应商要的,没有一个是线性的吧

但是偶尔会出现过了一段时间背光先关掉了,然后自动进入CPU休眠状态,这时只能通过按休眠键才唤醒,这是我不希望看到的
正常情况下是由PM来管理系统的状态切换的,默认设定是支持你的要求的,但为什么偶尔会进Suspend,必须要跟踪分析代码来查看,会不会有别的线程在更改系统状态,还是有修改过PM的代码?
yashi 2009-02-10
  • 打赏
  • 举报
回复
好像放电和充电都不是线性的,这个你找个做电池的人了解一下,他们最清楚。

控制面板中的东西,其实只是设置了注册表,具体怎么处理,还要看你的电源管理驱动。

19,503

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧