FreeRTOS任务管理

一:单任务系统

在单任务系统中的程序框架大致如下图,即裸机时代编程框架,逻辑编程主要是采用超级循环系统(super-loops),有称作前后台系统,应用程序是一个无限循环,循环中完成各个操作;
这里写图片描述

二:单任务系统 至 多任务系统的进化

概述:多任务系统即RTOS系统的实现,关键在于调度器即任务调度器,它的作用是使用相关的调度算法来决定当前需要执行的任务,如下图图2所示,创建了任务并且完成OS初始化之后,就可以通过调度器来决定任务A,任务B,任务C的运行,从而实现多任务系统,有一点需要注意的是,此处所说的多任务系统并非多个任务同时运行,而是同一时刻只能有一个任务可以运行,只是通过调度器的决策,看起来像事所有的任务同时运行一样,如下图图3所示,

这里写图片描述

这里写图片描述

这里写图片描述

三:代码框架

QueueHandle XXX_listen_queue = NULL;

//发送任务执行标志函数
    void send_moter_order(char order)
    {
    ...
            if(XXX_listen_queue){
            xQueueSend(XXX_listen_queue, &evt, 0);
            }
    }

//任务函数
void XXX_evt_task(char order)
{
while(1){
    //如果接收到 执行任务的指令
    if(xQueueReceive(XXX_listen_queue, &evt, 2000 /portTICK_RATE_MS))//系统在该任务执行2s

    ...//所执行的操作

    }
}


void XXX_init()
{
  //创建消息队列 用于接收 任务执行 命令
motor_listen_queue = xQueueCreate(10, sizeof(uint32_t));

//创建任务 优先级为5 任务为函数XXX_evt_task
xTaskCreate(XXX_evt_task,"XXX",2048,NULL, 5, NULL);

}

其他任务通过 send_moter_order()函数来发送该任务执行标志,本任务收到任务执行命令之后,再等待至抢占到CPU之后即优先级为5的XXX任务被调度,当xQueueReceive()返回为真即接收到执行命令之后,则执行任务。

本文作为工作笔记参考了大神 席萌0209 的相关博客:http://forum.armfly.com/forum.php?mod=viewthread&tid=21079&extra=page%3D1%26filter%3Dtypeid%26typeid%3D29

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/81210897
今日推荐