作者zzss2003 (brotherD)
看板C_and_CPP
標題[問題] task是subroutine?
時間Thu Sep 21 11:48:56 2017
Hi,最近在拜讀An embedded software primer,目前看到第六章了。
書中提到,在談論RTOS時,task就是個subroutine。圖:
https://imgur.com/a/UmfbV
依我的了解,routine指的就是C中的function,那麼subroutine指的應該是function裡面
的function call吧?也就是說:
void func(void)
{
subroutine_1();
subroutine_2();
}
其中subroutine1跟2就是task。
也就是說,做完一個routine中全部的task,才能完成那個routine。拿個簡單的例子,在
I2C中,必須要start,write,ack,read才能完成一個讀取的動作。所以這個I2C routine需
要四個task才能完成。
----假如以上的假設是成立的----
書中又說,在RTOS裡,Scheduler的功能是要追蹤每個task的狀態,且決定哪個task要被執
行。圖:
https://imgur.com/a/9fKWJ
-------------------------------
task有分三種狀態,running、ready、blocked。我猜測這三種狀態分別是以:flag=1且正
在執行、flag=1但還沒有被執行、沒有flag下去作判斷。也就是說Scheduler是依據flag判
斷task現在是在哪個狀態,且再利用事先決定好的優先權順序去決定哪個task要被放到
running state。
對於以上假設,在腦海中對Secheduler這個function(我認為它是個function)有個初步的
概念。
Secheduler要知道所有task的flag的態、task的優先順序。所以要實作一個被Secheduler
呼叫的stack,裡面放的是各個task的address,然後利用flag=1進入中斷時把task的
address放進stack。還要實作一個flag priority的stack function,這個function是在各
個task進入中斷時要呼叫的,要知道這個中斷在這個時間點能不能放進priority stack,
或是要等別的flag先放進去之後再接著放。
-------------------------------
打完覺得很多地方沒有考慮到,但是也說個不出所以然,想請各位前輩幫小弟抓出邏輯上
的矛盾,感激不盡
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.26.157
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1505965738.A.A2B.html
1F:→ smmoon: google RTOS wiki 09/22 13:20