WinCE设置线程优先级影响

工业通信软件如CANopen和etherCAT一般都需要系统提供一个精准的timer。

前一段时间 时间在ARM 平台的WinCE上面实现精准度为250us 和500us 的timer。主要是利用硬件上面的一个定时器来实现计时功能。然后用驱动再实现一个可以提供250us或500us倍数的timer。 基本原理是:主线程里面主要是 open close 和DeviceIOControl的动作, 驱动初始化的时候还启动一个名叫 A 的thread,在A thread里面实现中断处理(每250us或者500us的基准频率触发一次),查看当前的等待时间是多少,如果是250us或者500us则立即触发 (通过事件方式,PulseEvent),如果是基本频率的倍数,则直接进入下次基本频率的等待,直到等待的时间timeout,立即触发。

最初简单的用name event 方式,来实现driver与AP的交互,为了简化操作,改用如下的DeviceIOControl方式。

系统AP的与driver的调用顺序如下:

 AP                               driver

Createfile XXX_Open

DevieIOControl() XXX_IOControl: set timer period

DeviceIOControl() XXX_IOControl:wait exactly time and use waitforsingleobject and return.

CLose XXX_Close

问题出现在多个AP同时在使用AP的时候,当其中一个AP正在等待的时候。另外一个AP close 掉的时候,竟然会影响到另外调用的AP。后来查找原因是因为AP里面主线程开启了一个thread并且将新开启的thread priority 提高了,在close掉新开启的thread的时候会影响到driver。经过各种尝试最后将新开启线程的priority 调整到原来默认的就OK了。

WinCE 在某些time critical 的应用中,新开启的thread 结束前首先要将new thread的优先级设置为默认的优先级,然后再进行关闭动作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值