⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpuload.c

📁 Vxworks下的C例子程序
💻 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 + -