测试CPU空闲率(Vxworks)

 #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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值