jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
阅读:5426回复:30

suspend系统后,无法走进OEMPowerOff函数,这是怎么回事?

楼主#
更多 发布于:2007-07-25 12:30
以下是调用suspend后的打印语句。
0x83dd1400: FS: Got Power notif 0x00000002
0x83dd1400: FSREG: Flushing registry
0x83dd1400: FSRAM: Flushing cached file data
0x83dd1400: Powering Off system:
0x83dd1400:   Calling GWES power proc.
0x83dd1400: ++Ps2Keybd::KeybdPowerOff
0x83dd1400: --Ps2Keybd::KeybdPowerOff
0x83dd1400:   Calling device manager power proc.
0x83dd1400:   Calling OEMPowerOff...
RaiseException: Thread=83dd1400 Proc=81a77c10 'device.exe'
AKY=00000039 PC=03f91c54(coredll.dll+0x00051c54) RA=8021e63c(NK.EXE+0x0001e63c) BVA=81a89f00 FSR=81a39220
Error Reporting Memory Reserved, dump size = 00020000
我把除lcd外,所有的驱动都不加载,还是这样的,跟了一下发现走到kwin32.c中的KCall((FARPROC)CallOEMPowerOff);后就死了。但是没有进OEMPowerOff。哪位大虾知道帮忙分析一下吧。
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-25 21:44
好像你这个DEBUG版,我从来没有在DEBUG版上调过POWEROFF功能,你试试RELEASE版是不是好的,按说到这个地方应该就能进OEMPOWEROFF了.
学海无涯
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-26 08:53
谢谢斑竹,果真release可以走到。再请教一下suspend后怎么唤醒呢?
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-07-26 20:37
这要看你的系统是怎么设计的(包括硬件与软件).

如果CPU此时只是进入IDLE状态,就是只是停了,但还是上电的,那用一个中断就可以唤醒它.
如果CPU都没电了,那你在进入这种状态之前就应该把当前的进程上下文保存下来,CPU再加电时做恢复,就比较麻烦了.
学海无涯
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-07-27 10:44
斑竹,我的CPU还有电,我想问的是调用系统哪个函数来唤醒系统?因为系统suspend时,把所有的驱动的POWEROFF都调用了一次,最后走到OEMPOWEROFF,那么唤醒是不是也应该有个函数把所有的poweron都调用一次呢?
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-07-27 19:33
唤醒当然不是那个函数能做了,POWEROFF以后CPU都不动了,无法执行代码,唯一能唤醒的就是中断,如果CPU已经断电,就得再加电才能动.
学海无涯
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-07-30 09:16
可是挂起操作最终也调用OEMPOWEROFF,所有我没在OEMPOWEROFF中关掉CPU,只是把频率降到最低。我想在需要的时候唤醒,那这种情况应该怎么办呢?
sniper167
驱动中牛
驱动中牛
  • 注册日期2006-07-12
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望411点
  • 贡献值0点
  • 好评度321点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-07-30 10:20
请教了一哥们
他说休眠时,执行到OEMPOWEROFF中间某个地方就停了
如果出现一个中断把cpu唤醒  就会接着从OEMPOWEROFF中停了的那个地方接着往下执行

jason兄可以参考OEMPOWEROFF的代码  前半段都是在保存一些东西 估计执行完CPUPowerOff就停了  唤醒后继续执行 后面都是一些恢复的操作
[url]http://sniper167.bokee.com[/url]
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-07-30 14:37
唤醒后所有的设备都还可以用吗?我知道suspend的时候,会把所有驱动的poweroff调用一遍,唤醒时应该有个什么函数再把poweron调一次才对吧。
liulord
驱动牛犊
驱动牛犊
  • 注册日期2007-07-31
  • 最后登录2009-05-18
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望155点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-07-31 10:42
pm里面的注释说调用的是startup.c,也就是你启动的那部分代码,这时候你就要在启动的时候检测你cpu的sleep状态标志,然后跳转startup的code到你自己写的数据恢复部分,从而唤醒,否则可能会变成重启的。
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-07-31 16:05
也就是说整个唤醒过程都得自己写了?
sniper167
驱动中牛
驱动中牛
  • 注册日期2006-07-12
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望411点
  • 贡献值0点
  • 好评度321点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-08-01 10:26
引用第10楼jasonshi于2007-07-31 16:05发表的  :
也就是说整个唤醒过程都得自己写了?


不是吧 没那么复杂哦

唤醒时每个函数的powerup应该是系统自动调用
[url]http://sniper167.bokee.com[/url]
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-08-01 11:32
引用第11楼sniper167于2007-08-01 10:26发表的  :


不是吧 没那么复杂哦

唤醒时每个函数的powerup应该是系统自动调用


那唤醒的那个动作应该调用哪个函数呢?sniper167兄知道吗?
系统suspend后,没有真的断点,按开关键,触发中断,我在中断里调用那个函数可以让系统自动调用每个函数的powerup呢?
liulord
驱动牛犊
驱动牛犊
  • 注册日期2007-07-31
  • 最后登录2009-05-18
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望155点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-08-01 13:49
你是什么样的cpu阿,你suspend对应的状态就是你off.c或者oemoff.c里面的操作,我用pxa270,off.c里面进入sleep模式,OEMPowerOff()这个函数里面写好了suspend前后的操作,也就是sleep的前后操作,sleep前开wakeupsource,调用各种poweroff函数,唤醒时,首先调用恢复函数,恢复一些状态,然后调用各种poweron函数,这些步骤都是datasheet里面规定的,而且这个csp文件可能已经写好了,当唤醒的中断来时,pxa270把这个定义成为sleep reset,自动进入startup.c,startup.c中就得按sleep标志位来判断一下,然后跳转到我上面说的那个恢复函数。这样就跳回去了。你可以参考下样例和pm
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-08-01 15:38
楼上的兄弟说的poweron,poweroff可是各个驱动的电源管理?还是自己写的OEM层的电源管理?
还有你说的start.c在哪里?
liulord
驱动牛犊
驱动牛犊
  • 注册日期2007-07-31
  • 最后登录2009-05-18
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望155点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-08-01 15:58
BSPPowerOff();
OALKitlPowerOff();
// suspend or sleep
OALKitlPowerOn();
BSPPowerOn();
上面省略了一些代码。startup.s文件,bootloader里面应该是。你用的是pxa270么
hzwwin
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2008-01-16
  • 粉丝0
  • 关注0
  • 积分180分
  • 威望19点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-08-01 16:47
楼上说的样例和pm是在哪里?Wince5.0还是4.2?
liulord
驱动牛犊
驱动牛犊
  • 注册日期2007-07-31
  • 最后登录2009-05-18
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望155点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-08-01 16:54
wince5.0里面的pm,off.c样例参考samsung的,pxa270的就写了个接口,270的sleep进入和恢复方法是csp里面的xllp_pm_sleepfwa.s汇编接口。
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-08-01 17:37
我用的是公司自己做的ARM芯片,我在挂起的时候,走到OEMPowerOff中,并没有让cpu停止,只是关闭外设,降低频率。进入一个死等拉GPIO的循环,如果有GPIO动作,就出循环,我不知道出来该干点什么?
liulord
驱动牛犊
驱动牛犊
  • 注册日期2007-07-31
  • 最后登录2009-05-18
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望155点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-08-01 17:44
出来就上电,你怎么关闭的外设,就怎么打开阿,不行么?下班先走了,明天来讨论,呵呵
上一页
游客

返回顶部