WinCE 5.0+2443平台上操作Flash同时挂起(Sleep或叫做Suspend)无法唤醒(Resume或Wakeup)

guopeixin 2008-07-30 10:15:22
现象描述:
1. 工作正常情况下
WinCE 5.0+2443平台上通过在PowerButton Driver里检测到HW Button有按下去的动作,会以PostMessage(HWND_BROADCAST,WM_OEM_POWERBUTTON_PRESSED,0,0)的方式广播一个消息WM_OEM_POWERBUTTON_PRESSED,AP_1.exe接收到该消息后调用SetSystemPowerState(NULL, POWER_STATE_SUSPEND, POWER_FORCE)使系统进入Sleep模式。(注:在Sleep之前会将外部中断0设置为唤醒源,HW Button弹到正常的状态时将会触发一个外部中断0)
当HW Button有弹回到正常的状态将会触发一个外部中断,进而系统被唤醒。
正常的连续测试100多次没有问题。
2. 唤醒不成功的情况下
在一个AP_2.exe里面,以CreateFile的方式创建一个名为PerfTest.DAT的文件,然后向该文件以WriteFile的方式写入8M Byte的数据,分256次,每次写入32K Byte的数据,代码中会重复的运行该过程。
同时运行AP_1.exe和AP_2.exe,也即向Flash中不停的写入数据的时候测试挂起和唤醒,系统能够正常的挂起,但是有概率的无法唤醒,平均每次测试3次,就有一次无法唤醒。
从Debug信息上来看,所有Driver的×××_PowerUp都正常的调用起来并正常的退出,而后面就没有任何的信息了,正常情况下后面应该是驱动中建立的一些线程输出的Debug信息。
****************************************
另外,将系统中所有的Driver,除了PowerManager,PowerButton以及Flash驱动外的其它设备驱动全部拿掉依然会出现这种问题;而且该平台上的Flash Driver和PowerManager与其它项目上的完全一致。
再附加一点,通过JTAG方式查看并记录PC指针的值,发现虽然系统没有唤醒起来,但是PC指针一直在走,而且是在某一个范围内循环。不知道应该怎么样结合PlatformBuilder的Release目录下的.map文件来判断系统究竟在哪些函数中循环。


如果有什么地方我没有说清楚的,随时在线等待您的提问。
...全文
185 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
guopeixin 2009-01-08
  • 打赏
  • 举报
回复
谢谢哥们的回复
原因是这样的:
Sleep的时候会向CPU发送Sleep的指令,而在发送指令的时候存储器的一次最小的操作没有完成,导致Resume回来的时候存储器进入了一种不稳定的状态,最终发生了上面看到的情况;
Fite 2009-01-08
  • 打赏
  • 举报
回复
把你的代码贴出来帮你分析一下
gooogleman 2008-09-17
  • 打赏
  • 举报
回复
我也想了解
gsymichael 2008-07-30
  • 打赏
  • 举报
回复
等着看结果。
guopeixin 2008-07-30
  • 打赏
  • 举报
回复
补充一点:
最新的调试结果,系统是Down在PlatformResumeSystem里面

19,502

社区成员

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

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