在 uC/OS-III 初始化的时候,它会创建至少2个内部的任务(OS_IdleTask()和 OS_TickTask()),3 个可选择的任务(OS_StatTask(), OS_TmrTaks(),OS_IntQTask())。
1.空闲任务OS_IdleTask()
当CPU没有其它就绪任务运行时,空闲任务就会被运行。
OS_IdleTask()是 uC/OS-III 最先创建的任务。它的优先级通常是OS_CFG_PRIO_MAX-1。为了安全,它应该独享这个优先级。
空闲任务的每次循环,都会调用 OSIdleTaskHook()函数, 这个函数提供给用户扩展应用。
2.时钟节拍任务
OS_TickTask()任务被 uC/OS-III 创建,其优先级是用户可配置的。
OS_TickTask()用于追踪等待期满的任务、挂起超时的任务。 OS_TickTask()是一个周期性任务,它等待来自于 ISR 的信号量。
关于时钟节拍列表:
当执行时钟节拍任务时,它会遍历队列中所有等待期满的任务,等待事件超时的任务。
时基队列中有时也可能存放了上百个人物。实际队列通过一种方法检测这些任务是否期满,是否可以被设置为就绪。
时基列表中包含了一个表(OSCfg_TickWheel[])和一个计数器(OSTickCtr)。
表中的每个记录包含3个变量:NbrEntriesMax,NbrEntries,FirstPtr。
NbrEntriesMax:追踪到表中优先级最高的记录。在OSStartReset()时被复位。
NbrEntries:表明链接到该记录的任务序号。
FirstPtr:包含了一个指向双向任务列表的指针。
3.统计任务OS_StartTask()
这个任务能够统计总的CPU使用率,每个任务的CPU使用率,每个任务的堆栈使用量。
通缉任务在uC/OS-III中是可选的,当设置OS_CFG.H中的OS_CFG_STAT_TASK_EN为1时,统计任务的代码会被包含在程序中。
统计任务的优先级和它的任务堆栈大小在 OS_CFG_APP.H中配置。
调用 OSStatTaskCPUUsageInit()。当没有其它应用任务运行时,经过 1/OS_CFG_STAT_TASK_RATE 秒后 OSStatTaskCtr 的计数值就是 OSStatTaskCtr 的最大值,它意味着 CPU 的空闲时的工作速率。
OSStatTaskCtr 从 0 开始计数到10,000,000。
OSStatTaskCtr 每 1/OS_CFG_STAT_TASK_RATE 秒检测一次。
CPU 利用率%=(100-100 *OSTaskStatCtr/OSTaskStatCtr(max))。
OS_StartTask()也可以计算每个人物的堆栈使用量并将计算结果存于每个任务 OS_TCB 的 StkFree和 StkUsed 中。
4.定时器任务OS_TmrTask()
uC/OS-III 为用户提供了定时器任务,相应代码在 OS_TMR.C 中。
OS_CFG_TMR_EN为1时,定时器任务的代码会被包含在程序中。
当定时器任务递减计数变量到0时,任务中就会调用毁掉函数。毁掉函数被用户定义。因此,毁掉函数可以用来开启或关闭LED,或者其他的一些操作。
5.中断处理任务OS_IntQTask()
OS_CFG_ISR_POST_DEFERRED_EN为1时,uC/OS-III 就会创建这个任务,它的作用是尽快完成ISR中对post函数的调用,将消息量,消息等对象先存在媒介中,退出中断后,由中断处理任务完成将这些对象提交给任务。
OS_IntQTak()被 uC/OS-III 创建,它的优先级通常被设为 0(最高优先级)。
ucos-iii学习之系统内部任务
最新推荐文章于 2024-07-08 23:18:13 发布