现在位置:首页 >> 嵌入式操作系统 >> VxWorks
测试CPU空闲率(Vxworks)
作者:intq 时间:2009/10/23 文章来源:来自网络

#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);
}
}

上一篇:与vxWorks相比,Linux究竟[返回列表]下一篇: VxWorks基本概念及常见问题