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