资料介绍
一个网友的总结:stateMachine + timerTick + queue。
一种裸奔多任务模型
一个网友的总结:stateMachine + timerTick + queue。
在RTOS环境下的多任务模型:
任务通常阻塞在一个OS调用上(比如从消息队列取数据)。
外部如果想让该任务运转,就要向消息队列发送消息。
任务收到消息时,根据当前状态,决定如何处理消息。这就是状态机。
任务将消息队列中的消息处理完毕后,重新进入阻塞状态。
任务在处理中,有时要延时一段时间,然后才继续工作:
为了充分使用CPU,可以通过OS调用让其它任务去工作。
OS通常会提供一个taskDelay调用。
当任务调用taskDelay时,即进入阻塞状态,直到超时,才重新进入可工作状态(就
绪状态)。
下面说说裸奔环境下的多任务模型:
裸奔也可以多任务,但调度是由用户自主控制。
在RTOS环境下,一般提供抢占式调度。在裸奔时,一般是任务在处理告一段落后,主动
结束处理。
RTOS环境下的任务,一般处于一个while(1)循环中。
while(1){
从消息队列接收消息。如果没有,将阻塞。
处理消息。
}
裸奔下的任务,一般采用查询方式:
{
查询是否有待处理的事件。
如果没有,返回。
如果有,根据任务的当前状态,进行处理。处理完毕后,可能返回,也可能将待处
理事件全部处理完毕后再返回。
}
裸奔任务其实也处于一个while(1)循环中,只不过这个循环在任务外部。
main()
{
A_taskInit(); //任务的初始化
B_taskInit();
...
while(1){
A_taskProc(); //任务的处理