2009-05-20

NXT-G多工程式測試

NXT-G程式有多工的功能,也就是同時可以執行多條程式,只要其中一條程式沒有執行完畢,那麼NXT就不會結束執行。

『多工』用在同時間偵測多個感應器是很好的一件事,但是我們往往也因為多工的想法,忽略了資源共用及多頭馬車的效應。

下圖就是我們測試的程式,

上面的程式等待NXT右鍵按下後,發出Good Morning聲音,並讓馬達正轉五秒。

下面的程式等待NXT左鍵按下後,發出You are Good聲音,並讓馬達反轉五秒。

注意!我們讓兩條程式同時控制兩種資源,『喇叭』及『BC馬達』



那麼當狀況同時發生時,這些輸出資源應該聽誰的話呢?我們直接執行程式。



先按下NXT右鍵,出現下面的畫面




接下來讓馬達運轉五秒後,程式在NXT螢幕顯示計時器的值,大約是五秒。



如果在BC馬達正轉期間,我們壓下NXT左鍵,螢幕就會出現如下圖:

表示在BC馬達正轉1.582秒時,上面的程式受下面的程式影響,結束馬達正轉,繼續NXT螢幕顯示計時器的值。

同時下面的程式也開始執行,於是BC馬達開始反轉。



接下來就讓下面的程式跑完,於是NXT螢幕顯示5043,表示BC馬達馬達完成反轉五秒鐘。




我們可以在任何時候重複按下NXT的左右鍵,試試多工的狀況。

透過這個程式,我們可以知道兩件事情:

1. 當多工程式搶資源時,會強迫資源停止前面的命令。讓資源接收執行新的命令。

2. 多工程式會繼續完成下一個命令。

多工可以透過一些旗標防止資源共享卻又無所適從的情況。

因為頭暈,寫得有一點混亂,最好是大家實際試試看。


沒有留言:

張貼留言

探奇歡迎大家留言討論!謝謝分享你的意見。