2008年2月19日 星期二

Cooperative Schedular在無OS的嵌入式系統

Cooperative Schedular能夠在小型嵌入式系統提供什麼樣的好處呢? 就拿一般的8051的範例來說,很多的範例所做的延遲功能(Delay),或許是用在LED需要的閃爍延遲、或許是IC的spec所需要的延遲,絕大多數都是使用loop來做:
void delay_10ms( int delay)
{
while( delay ) delay--;
}
然後去微調delay的數量來達到需要的delay時間。如果是只要延遲幾個clock還可以,但是如果是要延遲更長的時間,使用這種方式無疑是讓你的機器做白工。因為在loop的時候,你的CPU是100%的時間都在做一件事情,那就是一直在執行while這個動作。為什麼不想個辦法讓這個工作正在延遲狀態的時候,讓CPU去做別的事情,或是CPU沒事做的話就進入省電模式。等到延遲時間到了以後,CPU才再繼續動作。

但是如果使用Time-Triggered Cooperative Schedular來做這件事情將會非常的有效率,可以讓CPU在有工作的時候去動作。可以很容易的控制每個工作的延遲時間與執行週期,以至於可以在延遲期間或是沒有工作需要執行的時候進入省電模式,降低溫度與耗電。

另外,要怎麼去設計程式,才可以讓一個Task不需要busy loop就可以利用Cooperative Schedular達成延遲的效果呢?過幾天我拿鍵盤掃描的例子來跟大家分享。

沒有留言: