开机启动加载驱动过程中调用PostMessage函数出错
今天在WINCE5.0+S3C2440系統調試檢測出租車是否載客的驅動的時候遇到這樣的問題:
發現在開機啟動加載驅動過程中調用PostMessage函數時會導致調用的線程崩潰,比如如果下面的線程在創建時調用了:
PostMessage(HWND_BROADCAST, MSG_TAXI_BUSY, 0, 1);//taxi idle
就會彈出下面的信息:
AKY=00000005 PC=8c2d54fc(NK.EXE+0x000d54fc) RA=8c2c0b38(NK.EXE+0x000c0b38) BVA=00000001 FSR=00000001
?
如果在系統加載完成后再調用PostMessage函數就不會有這個問題,至于原因目前還不知道,如果知道的朋友,麻煩告知,謝謝。
?
下面是改為中斷檢查的線程Taxi_MonitorThread的實現:
?
DWORD
Taxi_MonitorThread(PVOID pArg)
{
?Taxi_EnableInterrupt();
?gTaxiStatuIntrEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
?if (!(InterruptInitialize(SYSINTR_TAXI, gTaxiStatuIntrEvent, 0, 0)))
?{
??RETAILMSG(1, (TEXT("::: SYSINTR_POWER Init Fail/r/n")));
?}
?while(1)
?{
??WaitForSingleObject(gTaxiStatuIntrEvent, INFINITE);
??
??if(v_pIOPregs->rGPFDAT&(0x1<<7))
??{
???RETAILMSG(1, (TEXT("taxi idle!/r/n")));
???PostMessage(HWND_BROADCAST, MSG_TAXI_BUSY, 0, 1);//taxi idle
??}
??else
??{
???RETAILMSG(1, (TEXT("taxi busy!/r/n")));
???PostMessage(HWND_BROADCAST, MSG_TAXI_BUSY, 1, 1);//taxi busy
??}
??InterruptDone(SYSINTR_POWER);
?}
}
?
解決此問題的帖子http://topic.csdn.net/u/20110325/14/9c29b991-64e1-42a0-b4b3-bafe1241765c.html
總結
以上是生活随笔為你收集整理的开机启动加载驱动过程中调用PostMessage函数出错的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如果C++程序要调用已经被编译后的C函数
- 下一篇: WINCE下SOS驱动开发