📄 cpuload.c
字号:
typedef struct cpuUsage { SEM_ID startSem; int didNotComplete; unsigned long ticksNoContention; int nBurnNoContention; unsigned long ticksNow; int nBurnNow; double usage;} cpuUsage;static cpuUsage *pcpuUsage=0;static double cpuBurn(){ int i; double result = 0.0; for(i=0;i<5; i++) result += sqrt((double)i); return(result);}static void cpuUsageTask(){ while(TRUE) { int i; unsigned long tickStart,tickEnd; semTake(pcpuUsage->startSem,WAIT_FOREVER); pcpuUsage->ticksNow=0; pcpuUsage->nBurnNow=0; tickStart = tickGet(); for(i=0; i< pcpuUsage->nBurnNoContention; i++) { cpuBurn(); pcpuUsage->ticksNow = tickGet() - tickStart; ++pcpuUsage->nBurnNow; } tickEnd = tickGet(); pcpuUsage->didNotComplete = FALSE; pcpuUsage->ticksNow = tickEnd - tickStart; }}static double getCpu(){ if(pcpuUsage->didNotComplete && pcpuUsage->nBurnNow==0) { pcpuUsage->usage = 0.0; } else { double temp; double ticksNow,nBurnNow; ticksNow = (double)pcpuUsage->ticksNow; nBurnNow = (double)pcpuUsage->nBurnNow; ticksNow *= (double)pcpuUsage->nBurnNoContention/nBurnNow; temp = ticksNow - (double)pcpuUsage->ticksNoContention; temp = 100.0 * temp/ticksNow; if(temp<0.0 || temp>100.0) temp=0.0; /*handle tick overflow*/ pcpuUsage->usage = temp; } pcpuUsage->didNotComplete = TRUE; semGive(pcpuUsage->startSem); return(pcpuUsage->usage);}static void cpuUsageInit(void){ unsigned long tickStart,tickNow; int nBurnNoContention=0; int ticksToWait; ticksToWait = SECONDS_TO_BURN*sysClkRateGet(); pcpuUsage = calloc(1,sizeof(cpuUsage)); tickStart = tickGet(); /*wait for a tick*/ while(tickStart==(tickNow = tickGet())) {;} tickStart = tickNow; while(TRUE) { if((tickGet() - tickStart)>=ticksToWait) break; cpuBurn(); nBurnNoContention++; } pcpuUsage->nBurnNoContention = nBurnNoContention; pcpuUsage->startSem = semBCreate (SEM_Q_FIFO,SEM_EMPTY); pcpuUsage->ticksNoContention = ticksToWait; pcpuUsage->didNotComplete = TRUE; taskSpawn("cpuUsageTask",255,VX_FP_TASK,1000,(FUNCPTR)cpuUsageTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -