任务
首先看她定义的数据结构吧!
任务控制块tcb
在UCOS-II.H中定义了tcb结构:
http://blog.youkuaiyun.com/benny_cen/article/details/3937774#comments
4.创建空闲任务和统计任务
这两个任务在UCOS2里是默认创建,其中一个在OSInit中创建,另一个用户可以在创建任务中调用OSStatInit()创建
空闲任务
OSInit中调用OS_InitTaskIdle();在OS_InitTaskIdle函数中创建了空闲任务:
(void)OSTaskCreate(OS_TaskIdle,
(void *)0,
&OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
OS_IDLE_PRIO); //优先级别最低
然后看OS_TaskStat这个空任务做了什么:
void OS_TaskIdle (void *parg)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
cpu_sr = 0;
#endif
parg = parg;
for (;;) {
OS_ENTER_CRITICAL();
OSIdleCtr++; //计数
OS_EXIT_CRITICAL();
OSTaskIdleHook();
}
}
统计任务:
OSInit中调用OS_InitTaskStat();创建了统计任务,了解处理器利用率,优先级比空闲高一级。
(void)OSTaskCreate(OS_TaskStat,
(void *)0,
&OSTaskStatStk[OS_TASK_STAT_STK_SIZE-1], OS_STAT_PRIO);
然后看OS_TaskStat任务,每秒计算一次处理器在单位时间内被使用的时间,公式
OSIdleCtr
OSCPUUsage = 100 * (1 - ----------------------------) (units are in %)
OSIdleCtrMax
通过统计空闲任务来知道目前处理器的占用率。