开机启动加载驱动过程中调用PostMessage函数出错

在WinCE5.0+S3C2440系统中调试出租车载客状态检测驱动时发现,开机启动加载驱动过程中调用PostMessage函数会导致线程崩溃。若在系统加载完成后调用则不会出现问题。文中提供了修改后的中断检查线程实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在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.youkuaiyun.com/u/20110325/14/9c29b991-64e1-42a0-b4b3-bafe1241765c.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loongembedded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值