当前位置:编程学习 > 网站相关 >>

uCOS2_CPU利用率的实现

uCOS2中的利用率
作者:JCY
此文中是对统计任务理解,若有错误之处请指出,不胜感激!
在uCOS2操作系统当中可以得到CPU的利用率,计算利用率是通过一个任务来计算的,任务的名字叫“OSTaskStat()”.如果要使用任务需要将OS_CFG.H头文件中的OS_TASK_STAT_EN宏定义为真。这样你就可以在程序中使用任务统计功能了。
如果应用程序打算使用统计任务,那么你必须在主函数当中只建立一开始任务,然后在开始任务中调用OSStatInit(),之后你就可以建立其他任务了。
我们知道如果要使用uCOS2操作系统需要在main()函数中调用OSInit()函数,先把此函数的代码复制如下:
void  OSInit (void)
{
    OSInitHookBegin();                                           /* Call port specific initialization code   */
    OS_InitMisc();                                               /* Initialize miscellaneous variables       */
    OS_InitRdyList();                                            /* Initialize the Ready List                */
    OS_InitTCBList();                                            /* Initialize the free list of OS_TCBs      */
    OS_InitEventList();                                          /* Initialize the free list of OS_EVENTs    */
#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
    OS_FlagInit();                                               /* Initialize the event flag structures     */
#endif
#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
    OS_MemInit();                                                /* Initialize the memory manager            */
#endif
#if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
    OS_QInit();                                                  /* Initialize the message queue structures  */
#endif
    OS_InitTaskIdle();                                           /* Create the Idle Task                     */
#if OS_TASK_STAT_EN > 0
    OS_InitTaskStat();                                           /* Create the Statistic Task                */
#endif
#if OS_TMR_EN > 0
    OSTmr_Init();                                                /* Initialize the Timer Manager             */
#endif
    OSInitHookEnd();                                             /* Call port specific init. code            */
#if OS_DEBUG_EN > 0
    OSDebugInit();
#endif
}
在函数中会看到如下代码:
    OS_InitTaskIdle();                                           /* Create the Idle Task                     */
#if OS_TASK_STAT_EN > 0
    OS_InitTaskStat();                                           /* Create the Statistic Task                */
这两个函数其实就是建立两个任务,一个是空闲任务,一个是任务统计任务。空闲任务是每一个uCOS2应用程序中必须要使用的,但是统计任务可以不用。
在InitTaskIdle()函数中的关键代码如下:
    (void)OSTaskCreateExt(OS_TaskIdle,
                          (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
                          &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */
                          OS_TASK_IDLE_PRIO,                         /* Lowest priority level                */
                          OS_TASK_IDLE_ID,
                          &OSTaskIdleStk[0],                         /* Set Bottom-Of-Stack                  */
                          OS_TASK_IDLE_STK_SIZE,
                          (void *)0,                                 /* No TCB extension                     */
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
在InitTaskStat()函数中的关键代码如下:
    (void)OSTaskCreateExt(OS_TaskStat,
                          (void *)0,                                   /* No args passed to OS_TaskStat()*/
                          &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Top-Of-Stack               */
                          OS_TASK_STAT_PRIO,                           /* One higher than the idle task  */
                  &
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,