uC/OS-II定义了两个系统任务,空闲任务与统计任务。
空闲任务OSTaskIdle()是μC/OS-Ⅱ必不可少的系统函数,当没有其它任务进入就绪态时,该任务立即转入运行态。空闲任务的优先级永远设为最低,即
OS_LOWEST_PRIO
,永远不被挂起,也不能被删除。空闲任务什么都不做,只是在不停地给一个32位计数器
OSIdleCtr
加1,统计任务使用这个计数器以确定当前应用程序实际消耗的CPU时间。计数器是一个全局变量,大多数8位或16位CPU对32位变量加1需要多条指令,所以在访问前必须先关中断,然后再开启,以防高优先级任务或中断打入。
void OS_TaskIdle (void *p_arg)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
(void)p_arg; /* Prevent compiler warning for not using 'p_arg' */
for (;;) {
OS_ENTER_CRITICAL();
OSIdleCtr++;
OS_EXIT_CRITICAL();
OSTaskIdleHook(); /* Call user definable HOOK */
}
}
- 统计任务
OSTaskStat()
也是μC/OS-Ⅱ的系统函数之一,其功能是计算当前CPU的利用率,告诉用户应用程序使用了多少CPU时间。一旦将文件OS_CFG.H
中的配置常数OS_ TASK_STAT_EN
置1,这个任务就自动建立。它每秒钟运行一次,计算结果放在一个有符号的8位整数OSCPUsage
中,表示格式是百分数,精确到1%。
void OS_TaskStat (void *p_arg)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;