VxWorks平台下計算cpu的利用率

2021-05-10 05:21:08 字數 1865 閱讀 9130

1、vxworks的spylib

庫提供的

spy工具的實現原理。

spy利用輔助定時器來產生中斷,並且為每個任務維護乙個計數器。然後記下被中斷的任務,並且將該任務的計數器加一。經過一段時間後,每個任務的計數器反映了該任務占用cpu

利用率的情況。很明顯,這是利用抽樣技術。並且得到的cpu利用率

的準確程度取決於任務的持續性和週期性。

通過查詢

spylib.h

的檔案,我們發現除了

spy()

函式外,還有一

spycommon函式,

帶一函式指標引數。推測函式指標型別為(

int)(*p)

(char * fmtstr,…)

(經過驗證確實如此)。所以可以寫一自己的函式去接受

spy需要列印的資料,

spy呼叫該函式按行列印結果。我們可以不斷分析一行字串來得到我們需要的結果。

int spyptnfunc(const char * fmtptn,...)

另外一種方法是利用一特殊任務,該任務的優先順序比系統中的所有任務的優先順序都低,該任務是死迴圈,該任務的目的就是消耗

cpu資源,占用

cpu空閒時間,因為當系統中其它任務都被掛其時,該任務才能得到

cpu的使用權。假設一段時間

total

內,該任務的執行時間為

idle

,cpu

利用率的計算公式為(

total-idle

)%total

。這一種方法實現起來很簡單,但是它只能算得整個系統的

cpu使用情況,不能得到單個任務的

cpu使用情況!同時它會使

cpu滿負荷工作。源**如下

#include "vxworks.h"

#include "semlib.h"

#include "tasklib.h"

#define seconds_to_burn 60

typedef struct cpuusage cpuusage;

static cpuusage *pcpuusage=0;

static double cpuburn()

static void cpuusagetask()

tickend = tickget();

pcpuusage->didnotcomplete = false;

pcpuusage->ticksnow = tickend - tickstart;}}

double getcpu()

else

pcpuusage->didnotcomplete = true;

semgive(pcpuusage->startsem);

printf("cpu usage:%f/r/n",pcpuusage->usage);

return(pcpuusage->usage);

}void cpuusageinit(void)

tickstart = ticknow;

while(true)

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

}

Android平台下sax,dom,pull解析

1.android中三種xml的解析方式,分別為dom,sax,pull,其中pull的解析方式最優 2.dom,sax,pull解析方式的區別 1 dom解析方式 首先一下子載入整個文件然後再挨個節點解析,費流量 優點 對於處理大文件,以及能力強的cpu效能比較快 缺點 對於處理能力不夠強的cpu...

Android平台下sax,dom,pull解析

1.android中三種xml的解析方式,分別為dom,sax,pull,其中pull的解析方式最優 2.dom,sax,pull解析方式的區別 1 dom解析方式 首先一下子載入整個文件然後再挨個節點解析,費流量 優點 對於處理大文件,以及能力強的cpu效能比較快 缺點 對於處理能力不夠強的cpu...

VxWorks平台使用mini XML解析庫

雖然這個mini xml庫不是很難,但是還是折騰了幾天,其中fopen 函式開啟檔案的路徑是個問題,關於這個講解很少被提到 也許大神們不屑於討論路徑問題了,或者我太弱 這個部落格已經有乙個例子了,但是執行有問題再次基礎上進行修改,怕以後我自己也忘了 include include include i...