UCOSIII的系统任务

时间:2023-01-10 08:04:59

UCOSIII的系统任务

 一、空闲任务

  空闲任务的特点:

  1、空闲任务是UCOSIII创建的第一个任务;

  2、空闲任务是UCOSIII必须要创建的;

  3、空闲任务优先级是最低的,为:“OS_CFG_PRIO_MAK - 1”,也就是倒数第一个优先级;

  4、空闲任务中不能调用任何可使空闲任务进入等待态的函数!

  小知识点:空闲任务在程序开始部分的“OSInit(&err);”函数中创建;

  空闲任务的任务函数原型在:UCOSIII源码的“os_core.c”中的大概第781行,没事可以找出来多看看上面注释都什么意思;

  二、时钟节拍任务

  时钟节拍任务的特点:

  1、时钟节拍任务用来跟踪任务延时和任务等待超时;

  2、是UCOSIII必须要创建的任务;

  3、任务优先级一般要设的高一点,任务优先级用宏“OS_CFG_TICK_TASK_PRIO”来定义;

  UCOSIII的系统任务

  图 1

  如上图所示,列出了几个系统任务的优先级设置,时钟节拍任务的优先级仅次于中断;

  下图是这个宏定义在源码中的定义:

  UCOSIII的系统任务

  可以看到,是在源码中“os_cfg_app.h”中定义的,不过我们用户也可以自己修改,但是原则上,这个优先级要高一点,因为时钟节拍对于整个系统来说是比较重要的,它应该要优先处理;

  三、统计任务

  特点:

  1、在UCOSIII中,统计任务可用来统计CPU的使用率、各个任务的CPU使用率和各任务的堆栈使用情况;

  2、默认情况下,系统不会自动创建该任务,也就是说,它不是必须的,如果需要用户可开启这个任务;

  3、统计任务的优先级通过宏“OS_CFG_STAT_TASK_PRIO”来设置,一般设置为“OS_CFG_PRIO_MAX - 2”,也就是倒数第二个优先级,在图一中也有说明;

  统计任务开启步骤:

  1、将宏“OS_CFG_STAT_TASK_EN”置 1;

  2、必须在main函数创建的以一个任务也是唯一的一个应用任务里面调用函数“OSStatTaskCPUUsageInit()”;

  怎么理解上面一句话呢,先看看程序里面的使用方法:

  UCOSIII的系统任务

  按照我的理解就是,统计任务要由用户自己拿出来调用开启,也就是说需要在自己的 main 函数中写上关于统计任务开启的设置,而且你只能调用一次,(因为只需打开一次...)不能说是打开一次了又打开一次...我上面就是把他写到了任务创建函数中,这个任务函数只会执行一次,他的作用就是去专门创建用户想要的任务,事情办完之后就把自己删除了;

  四、定时任务

  特点:

  1、可选,不是必须开启的;

  2、不是用户去创建该任务,而是将宏定义打开后,由“OSInit()”来创建;

  开启方法:

  1、将宏“OS_CFG_TMR_EN”设置为 1,以使能定时任务;

  2、优先级由宏“OS_CFG_TMR_TASK_PRIO”定义;

  五、中断服务管理任务

  特点/综合:

  1、中断服务管理任务的优先级永远为 0,也就是永远最高,不可更改!

  2、可选,不是必须创建;

  3、通过宏“OS_CFG_ISR_POST_DEFERRED_EN”置 1,来开启;

  4、作用:我们开下原子的解释:

UCOSIII的系统任务