2009-05-20 22:23:00探奇教室
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. 多工程式會繼續完成下一個命令。
多工可以透過一些旗標防止資源共享卻又無所適從的情況。
因為頭暈,寫得有一點混亂,最好是大家實際試試看。
『多工』用在同時間偵測多個感應器是很好的一件事,但是我們往往也因為多工的想法,忽略了資源共用及多頭馬車的效應。
下圖就是我們測試的程式,
上面的程式等待NXT右鍵按下後,發出Good Morning聲音,並讓馬達正轉五秒。
下面的程式等待NXT左鍵按下後,發出You are Good聲音,並讓馬達反轉五秒。
注意!我們讓兩條程式同時控制兩種資源,『喇叭』及『BC馬達』
那麼當狀況同時發生時,這些輸出資源應該聽誰的話呢?我們直接執行程式。
先按下NXT右鍵,出現下面的畫面
接下來讓馬達運轉五秒後,程式在NXT螢幕顯示計時器的值,大約是五秒。
如果在BC馬達正轉期間,我們壓下NXT左鍵,螢幕就會出現如下圖:
表示在BC馬達正轉1.582秒時,上面的程式受下面的程式影響,結束馬達正轉,繼續NXT螢幕顯示計時器的值。
同時下面的程式也開始執行,於是BC馬達開始反轉。
接下來就讓下面的程式跑完,於是NXT螢幕顯示5043,表示BC馬達馬達完成反轉五秒鐘。
我們可以在任何時候重複按下NXT的左右鍵,試試多工的狀況。
透過這個程式,我們可以知道兩件事情:
1. 當多工程式搶資源時,會強迫資源停止前面的命令。讓資源接收執行新的命令。
2. 多工程式會繼續完成下一個命令。
多工可以透過一些旗標防止資源共享卻又無所適從的情況。
因為頭暈,寫得有一點混亂,最好是大家實際試試看。