jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
阅读:5434回复: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。哪位大虾知道帮忙分析一下吧。
olanlano
驱动牛犊
驱动牛犊
  • 注册日期2008-05-26
  • 最后登录2008-11-24
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望14点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-30 09:59
我们用的是pxa270,我想休眠后不要重启的方式,而是以恢复现场的方式唤醒的,为什么调用OEMCacheRangeFlush这个函数后唤醒不了系统呢,非常感谢!!!!
high
论坛版主
论坛版主
  • 注册日期2002-08-10
  • 最后登录2010-07-26
  • 粉丝4
  • 关注0
  • 积分60分
  • 威望655点
  • 贡献值0点
  • 好评度56点
  • 原创分0分
  • 专家分60分
板凳#
发布于:2008-05-30 05:11
你的是三星的芯片吗? 重启是对的.

复位有3种, 上电复位, 唤醒复位和看门狗造成的复位. 启动代码里面根据寄存器状态来分支.
olanlano
驱动牛犊
驱动牛犊
  • 注册日期2008-05-26
  • 最后登录2008-11-24
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望14点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-05-29 16:06
在调用OEMPOWEROFF函数中保存现场数据最后调用OEMCACHERANGEFLUSH时唤醒不了系统,但是去掉这个函数后能唤醒但系统变成硬复位启动方式,不能恢复现场方式唤醒.请大侠指点,谢谢!
high
论坛版主
论坛版主
  • 注册日期2002-08-10
  • 最后登录2010-07-26
  • 粉丝4
  • 关注0
  • 积分60分
  • 威望655点
  • 贡献值0点
  • 好评度56点
  • 原创分0分
  • 专家分60分
地下室#
发布于:2008-05-26 17:38
OEM开头的函数OEM厂家定制bsp时候实现的. OEMPowerOff()函数也是一样的.所以,能否休眠得看OEM函数是否实现这样功能并且测试过.

OEMPowerOff不是应用程序显示调用的. 应用程序调用SetSystemPowerState()或者GWESPowerOFF()时候,然后系统自行调用OEMPowerOff().

函数OEMPowerOff()的实现, 前半部分是保护现场,保护完毕后就进入了芯片的某种sleep模式, 后半部分是恢复现场, OEM是根据系统需求和芯片的sleep 模式来决定的. 比如SmartPhone的挂起,芯片并不会真的挂起,仍然在运行, 任意的中断可以唤醒. 而PPC的挂起, 就如同2440的一样,会进入PowerOff模式, 少数几个中断源作为唤醒源.唤醒后继续运行, 之前运行的程序如果不与电源管理模块交互,甚至不知道曾经挂起过.

我的blog有相关部分内容. 欢迎访问:  www.chenyq2008.spaces.live.com
olanlano
驱动牛犊
驱动牛犊
  • 注册日期2008-05-26
  • 最后登录2008-11-24
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望14点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-05-26 14:18
我们是PXA270 WINCE5.0,调用休眠函数老是进程死机,无法切换进程,是休眠的汇编那部分可能有问题,请哪位高手指点下迷津,万分感谢!
cf2008
驱动牛犊
驱动牛犊
  • 注册日期2004-03-10
  • 最后登录2009-05-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-03-31 15:43
kwin32.c  call  OEMPOwerOff(),

OEMPowerOFF() 调用我的一些GPIO管脚的管理程序.
现在我无法调用 OEMPowerOFF(), 紧急求援大侠.

老板催得急啊. 多谢了
cf2008
驱动牛犊
驱动牛犊
  • 注册日期2004-03-10
  • 最后登录2009-05-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-03-31 15:35
我的OEMPowerOFF 无法调用.
wenzai
驱动中牛
驱动中牛
  • 注册日期2002-04-16
  • 最后登录2011-03-04
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望424点
  • 贡献值0点
  • 好评度309点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-08-07 17:18
是这样的
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-08-07 15:33
就是说不用调用任何系统函数,我只要把硬件的寄存器恢复了就可以了?系统会处理一切?

谢谢wince_lover
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2007-08-07 14:55
出来就恢复现场,恢复频率。系统会调用各个驱动的POWERUP函数,你只要实现各个驱动的POWERHUP函数,将各个设备唤醒就可以了
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-08-01 17:59
呵呵,什么公司阿,这么早下班?
是,我出来肯定是先打开外设,但是挂起的时候os把所有的驱动的poweroff都调了一次,外设虽然打开了,可是驱动都被关off掉了,挂起的时候可以setpowerstatus(),就是不知道唤醒的时候是否有一个对应的函数可以唤醒所有的驱动?
liulord
驱动牛犊
驱动牛犊
  • 注册日期2007-07-31
  • 最后登录2009-05-18
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望155点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-08-01 17:44
出来就上电,你怎么关闭的外设,就怎么打开阿,不行么?下班先走了,明天来讨论,呵呵
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
13楼#
发布于: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分
14楼#
发布于:2007-08-01 16:54
wince5.0里面的pm,off.c样例参考samsung的,pxa270的就写了个接口,270的sleep进入和恢复方法是csp里面的xllp_pm_sleepfwa.s汇编接口。
hzwwin
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2008-01-16
  • 粉丝0
  • 关注0
  • 积分180分
  • 威望19点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
15楼#
发布于: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分
16楼#
发布于:2007-08-01 15:58
BSPPowerOff();
OALKitlPowerOff();
// suspend or sleep
OALKitlPowerOn();
BSPPowerOn();
上面省略了一些代码。startup.s文件,bootloader里面应该是。你用的是pxa270么
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
17楼#
发布于: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分
18楼#
发布于: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分
19楼#
发布于:2007-08-01 11:32
引用第11楼sniper167于2007-08-01 10:26发表的  :


不是吧 没那么复杂哦

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


那唤醒的那个动作应该调用哪个函数呢?sniper167兄知道吗?
系统suspend后,没有真的断点,按开关键,触发中断,我在中断里调用那个函数可以让系统自动调用每个函数的powerup呢?
上一页
游客

返回顶部