测试CPU空闲率(Vxworks)

来源:互联网 发布:数据堂去哪领任务 编辑:程序博客网 时间:2024/05/12 05:58
 #include "vxworks.h"
#include "taskLib.h"
#include "wdLib.h"
#include "intLib.h"

#define DEADLINE_TIME 1
#define PRIORITY 255


LOCAL WDOG_ID wdid;

LOCAL unsigned int idleBaseCount = 0;
LOCAL unsigned int idleCount = 0;

unsigned int G_idlePercent = 0xffffffff;

LOCAL void IdleFuncEntry (void);
LOCAL void calculateIdleHandle (void);

unsigned int getIdlePercent(void)
{
    return G_idlePercent;
}


BOOL initIdleFunction ( void )
{
    int tid;
    
    idleBaseCount = 0;
    
    if(NULL == (wdid = wdCreate()))
    {
        perror("cannot create idle watchdog/n");
        return ERROR;
    }    
    
    if( ERROR == wdStart(wdid,sysClkRateGet()*DEADLINE_TIME,
            (FUNCPTR)calculateIdleHandle,0 ) )
    {
        perror("error in starting idle watchdog timer/n" );
        return ERROR;
    }
    
    if( ERROR == (tid = taskSpawn( (char *)"IdleTask", PRIORITY,0, 1024,
            (FUNCPTR)IdleFuncEntry, 0,0,0,0,0,0,0,0,0,0 ) ) )
    {
        perror("error in create idle task/n" );
        return ERROR;
    }
    return TRUE;
}


LOCAL void calculateIdleHandle( void )
{
    
    if( idleBaseCount == 0 )
    {
        G_idlePercent = 0xffffffff;
        idleBaseCount = idleCount;    
    } else {    
        G_idlePercent = (idleCount * 100) / idleBaseCount;
    
        if( G_idlePercent > 100 ) {    
            G_idlePercent = 100;
            idleBaseCount = idleCount;
        }
    }
    
    idleCount = 0;
    
    if( ERROR == wdStart(wdid,sysClkRateGet()*DEADLINE_TIME ,
        (FUNCPTR)calculateIdleHandle,0 ) )
    {
        perror("error in restarting idle watchdog timer/n" );
    }
}



LOCAL void IdleFuncEntry(void)
{

    idleCount = 0;
    
    while( TRUE )
    {
        if( INT_CONTEXT() ) {
        
        } else {
        
        ++idleCount ;
        }
    
        taskDelay(0);
    }
}
原创粉丝点击