作者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/cn.aspx?n=bbs/C_and_CPP/M.1505965738.A.A2B.html
1F:→ smmoon: google RTOS wiki 09/22 13:20