yanshanbao 发表于 2012-3-4 22:24:05

第四天 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]
查看完整版本: 第四天 UC/OS-II的学习