看板 C_and_CPP 關於我們 聯絡資訊
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://www.ptt.cc/bbs/C_and_CPP/M.1505965738.A.A2B.html
smmoon: google RTOS wiki 09/22 13:20