WinCE設定執行緒優先順序影響

2021-05-24 02:35:25 字數 1028 閱讀 3034

工業通訊軟體如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 ***_open

devieiocontrol() ***_iocontrol: set timer period

deviceiocontrol() ***_iocontrol:wait exactly time and use waitforsingleobject and return.

close ***_close

問題出現在多個ap同時在使用ap的時候,當其中乙個ap正在等待的時候。另外乙個ap close 掉的時候,竟然會影響到另外呼叫的ap。後來查詢原因是因為ap裡面主線程開啟了乙個thread並且將新開啟的thread priority 提高了,在close掉新開啟的thread的時候會影響到driver。經過各種嘗試最後將新開啟執行緒的priority 調整到原來預設的就ok了。

wince 在某些time critical 的應用中,新開啟的thread 結束前首先要將new thread的優先順序設定為預設的優先順序,然後再進行關閉動作

執行緒優先順序的設定

執行緒的優先順序 1 10,10為最高端別,1為最低級別,5為預設級別 thread.min priority 最小優先順序 thread.max priority 最高優先順序 thread.norm priority 預設優先順序 設定優先順序 public class jointhread2 ...

Linux執行緒優先順序設定

本程式會讓系統失去i o響應,不建議去執行!include include include include include include void thr fun void arg if policy sched fifo else if policy sched other else if po...

56 設定執行緒優先順序

可以通過使用thread類中的setpriority方法設定執行緒的優先順序。setpriority 方法接收乙個int型別的引數,通過這個引數可以指定執行緒的優先順序,取值範圍是整數1 10,優先順序隨著數字的增大而增強。在thread類中封裝了三個int型別的數字 優先順序最低 public f...