|
WinCE 5.0+2443平台上操作Flash同时挂起(Sleep或叫做Suspend)无法唤醒(Resume或Wakeup)
[复制链接]
现象描述:
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文件来判断系统究竟在哪些函数中循环。
如果有什么地方我没有说清楚的,随时在线等待您的提问。
|
|