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”来定义;
图 1
如上图所示,列出了几个系统任务的优先级设置,时钟节拍任务的优先级仅次于中断;
下图是这个宏定义在源码中的定义:
可以看到,是在源码中“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()”;
怎么理解上面一句话呢,先看看程序里面的使用方法:
按照我的理解就是,统计任务要由用户自己拿出来调用开启,也就是说需要在自己的 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、作用:我们开下原子的解释: