Precedes:啟動多個Task
void Precedes( task1 , task2 ,task3 ,.....taskN)
用途:可同時啟動多個Task各自執行自己的程序。
StopAllTasks():停止所有Task
StopTask(taskA):停止taskA的程序
Stop(x == 24); // stop the program if x==24
Ex:假設有兩個Task 都對MotorA下指令一個是前進另一個是後退 ,這時你會看到NXT MotorA有時前進有時後退變得無所適從。
如果有多個Task對同一個驅動馬達下指令時就看誰先搶到工作權誰就先執行,因此這時候在使用Precedes指令時最好用mutex 來判斷誰最需要「工作權」,有點類似十字路口的紅綠燈,假如路口沒有號誌燈那所有車輛都要前進時就會發生車禍或是某個方向的車子一直前進而另一個方向的車子卻動彈不得,因此mutex 就像號誌燈讓多個方向的車流都能維持一定的流量而不打結。
從以下Example你可在NXT 螢幕看到反覆顯示 「go1」 0.5秒 「go2」
範例:
mutex muxFlag;
task go1(){
while(true){
Acquire(muxFlag);
TextOut(10,LCD_LINE3,"go1",false);
Wait(500);
ClearScreen();
Release(muxFlag);
}
}
task go2(){
while(true){
Acquire(muxFlag);
ClearScreen();
TextOut(10,LCD_LINE4,"go2",false);
Wait(500);
ClearScreen();
Release(muxFlag);
}
}
task main(){
Precedes(go1,go2);
}
沒有留言:
張貼留言