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...