首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

求WinCE暂停进程调度的步骤

2013-09-04 
求WinCE暂停进程调度的方法最近在用18B20做系统的温度检测,使用的是一线的通信协议,采用IO口模拟的方式进

求WinCE暂停进程调度的方法
最近在用18B20做系统的温度检测,使用的是一线的通信协议,采用IO口模拟的方式进行。系统通过定时采集的方式获取当前平台温度。
现在碰到一个问题,就是启动温度转换后有时读出来的温度采样数据,会有一两个位翻转(主要是将0读成1),导致结果发生错误,比如读取的数据应该是0x1fc,结果读出来实际的数据为0x81fc(因为不再启动转换而多读几次可以读到正确的数据)。开始以为是转换没完成导致数据错误,延长了等待时间(转换等待850ms)仍然不行,后来看网上说如果读取数据的时候,是在释放总线超过一定时间后读取的数据都是1,怀疑是不是由于系统调度,进程切换了,模拟IO通信被阻塞导致读取的时序发生了错误。
由于通信时间不会很长,最多就1ms,所以考虑是否可以暂时禁止一下系统的进程调度,独占整个资源,等到通信完成后再恢复,但是不知道如何操作,不知道有没有人这样做过。
只是这样的话确实会存在一定风险,哪位大侠还有更好的建议?先谢谢了!
系统的操作系统平台是WinCE 6.0 R1. WinCE
[解决办法]
两种方法:
  1.把操作放到OAL中去进行,使用kernelIOCTL操作
  2.设置高的线程优先级,调整线程量
           dwThreadID = GetCurrentThread();
    dwThreadPri = CeGetThreadPriority(dwThreadID);
    dwThreadQuantum = CeGetThreadQuantum(dwThreadID);
   CeSetThreadPriority(dwThreadID, 0);
   CeSetThreadQuantum(dwThreadID, 0);

热点排行