首页|嵌入式系统|显示技术|模拟IC/电源|元件与制造|其他IC/制程|消费类电子|无线/通信|汽车电子|工业控制|医疗电子|测试测量
首页 > 分享下载 > 常用文档 > 一种裸奔多任务模型

一种裸奔多任务模型

资料介绍
一个网友的总结: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();    //任务的处理

  
一种裸奔多任务模型
本地下载

评论