第四天 UC/OS-II的学习
第四天统计任务。
OSTaskStat(): 运行时间统计的任务。(stat 是 Status、statistic在UCOS中的缩写)。
每一秒钟运行一次。其程序函数在OS_CORE.c中。计算CPU的利用率。
CPU的利用率的值放在OSCPUUsage中,精度是1个百分点。
如果用户使用统计任务,必须在初始化时建立一个唯一的任务,在这个任务中调用OSStatInit()。然后再建立应用程序中其他的任务。
初始化统计任务的流程。
首先调用UC/OS-II中的系统初始化函数OSInit();
用户必须调用OSTaskCreat()或者OSTaskCreatExt()以用来建立TaskStart()。
最后启动函数OSStart(),这个函数将使TaskStart()开始执行。
下面是一个Main()函数。是初始化流程的体现。
void main()
{
SerialInitial();
InterruptInitial();
OSInit();
printf("start");
OSTaskCreate(Task1, (void xdata *)0, &Task1Stack,2);
OSTaskCreate(Task2, (void xdata *)0, &Task2Stack,3);
OSStart();
}
TaskStart()负责初始化和启动时钟节拍。 一定要在这儿启动时钟节拍。 不要再多任务还没有开始时就接收到时钟节拍中断。
系统统计初始化任务函数OSStatInit()调用延迟函数OStimeDly()将延时2个时钟节拍以停止自身的运行。为了使OSStatInit()与时钟同步。
OSStatInit(),空闲计数器OSIdleCtr被清零,然后OSStatInit()将延时一秒钟。一秒钟以后,将计数的值存在空闲计数器OSIdleCtrMax中。然后将OSStatRdy设为真,允许两个时钟节拍以后 开始计算CPU的利用率。其代码如下:
void OSStatInit (void)
{
OSTimeDly(2);
OS_ENTER_CRITICAL();
OSIdleCtr = 0L;
OS_EXIT_CRITICAL();
OSTimeDly(OS_TICKS_PER_SEC);
OS_ENTER_CRITICAL();
OSIdleCtrMax = OSIdleCtr;
OSStatRdy = TRUE;
OS_EXIT_CRITICAL();
}
利用率 = 1-OSIdleCtr/(OSIdleCtrMax)
燕山大学电气工程学院09级检测技术与仪器
页:
[1]