在系统中有开发者自己创建的任务也有系统内部任务 ,UCOSIII中有五个系统任务,分别为
1.空闲任务,
UCOSIII 的任务数是无数的,但是在实际使用中考虑到硬件资源 (ROM 和 RAM)等因素,不可能真的使用无数的任务,
在 UCOSIII 中可以使用宏 OS_CFG_PRIO_MAX 来定义可使用的任务数,
默认情况下 OS_CFG_PRIO_MAX 为 64。空闲 任务优先级为 OS_CFG_PRIO_MAX-1,说明空闲任务的优先级为最低的。
2.时钟节拍任务,
时钟节拍任务是 UCOSIII 必须创建的,同样,不需要我们手工创建。
时钟节拍任务的任务优先级为 OSCfg_TickTaskPrio,时钟节拍任务的优先级尽可能的高一点, 有些 默认设置时钟节拍任务的任务优先级为 1。
时钟节拍任务的作用是跟踪正在延时的任务,以及在指定时间内等待某个内核对象的任务,
3.统计任务,
在 UCOSIII 中统计任务可用来统计 CPU 的使用率、各个任务的 CPU 使用率和各任务的堆 栈使用情况,默认情况下统计任务是不会创建的,
如果要使能统计任务的话需要将宏 OS_CFG_STAT_TASK_EN 置 1,宏 OS_CFG_STAT_TASK_EN 在 os_cfg.h 文件中有定义。
当我 们将宏 OS_CFG_STAT_TASK_EN 置 1 以后,
OSinit()函数中有关统计任务的代码就可以编译了 额。OS_StatTaskInit() 函 数 用 来 创 建 统 计 任 务 ,
统 计 任 务 的 优 先 级 通 过 宏 OS_CFG_STAT_TASK_PRIO 设置,
ALIENTEK 将 统 计 任 务 的 优 先 级 设 置 为 OS_CFG_PRIO_MAX-2,也就是倒数第二。
4.定时任务,
UCOSIII 提供软件定时器功能,定时任务是可选的,将宏 OS_CFG_TMR_EN 设置为 1 就 会使能定时任务,在 OSInit()中将会调用函数 OS_TmrInit()来创建定时任务。
定时任务的优先级 通过宏 OS_CFG_TMR_TASK_PRIO 定义
5.中断服务管理服务,
当把 os_cfg.h 文件中的宏 OS_CFG_ISR_POST_DEFERRED_EN 置 1 就会使能中断服务管 理任务,UCOSIII 会创建一个名为 OS_IntQTask()的任务,
该任务负责“延迟”在 ISR 中调用的 系统 post 服务函数的行为。中断服务管理任务的任务优先级***是最高的,为 0!
在 UCOS 中可以通过关闭中断和任务调度器上锁两种方式来管理临界段代码
如果采用后一种,即调度器上锁的方式来管理临界段代码的话, 那么在中断服务函数中调用的“post”类函数就不允许操作诸如任务就绪表、等待表等系统内部 数据结构。
当 ISR(中断服务函数)调用 UCOSIII 提供的“post”函数时,要发送的数据和发送的目的地 都会存入一个特别的缓冲队列中,当所有嵌套的 ISR 都执行完成以后 UCOSIII 会做任务切换,
运行中断服务管理任务,该任务会把缓存队列中存放的信息重发给相应的任务。这样做的好处 就是可以减少中断关闭的时间,否则,在 ISR 中还需要把任务从等待列表中删除,
并把任务放 入就绪表,以及做一些其他的耗时操作。
————————————————
版权声明:本文为CSDN博主「嵌入式小宁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_53592457/article/details/130831812
|