生活随笔
收集整理的這篇文章主要介紹了
CPU使用百分比测量
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
1 CPU使用百分比測量
1.1 需求概述
1.2 設計原理
1.3 設計實現
特殊代碼塊:
統計使用百分比:
相關代碼如下:
uint32_t idleCount
;
uint32_t idleMaxCount
;static void initCpuUsageStat
(void);
static void checkCpuUsage
(void);
static void cpuUsageSyncWithSysTick
(void);static float cpuUsage
;
static uint32_t enableCpuUsageStat
;
static void initCpuUsageStat
(void)
{idleCount
= 0;idleMaxCount
= 0;cpuUsage
= 0;enableCpuUsageStat
= 0;
}
static void checkCpuUsage
(void)
{if (enableCpuUsageStat
== 0){enableCpuUsageStat
= 1;tickCount
= 0;return;}if (tickCount
== TICKS_PER_SEC
){idleMaxCount
= idleCount
;idleCount
= 0;tTaskSchedEnable();}else if (tickCount
% TICKS_PER_SEC
== 0){cpuUsage
= 100 - (idleCount
* 100.0 / idleMaxCount
);idleCount
= 0;}
}
void tTaskSystemTickHandler
(void)
{tNode
* node
;uint32_t status
= tTaskEnterCritical();for (node
= tTaskDelayedList
.headNode
.nextNode
; node
!= &(tTaskDelayedList
.headNode
); node
= node
->nextNode
){tTask
* task
= tNodeParent(node
, tTask
, delayNode
);if (--task
->delayTicks
== 0) {if (task
->waitEvent
) {tEventRemoveTask(task
, (void *)0, tErrorTimeout
);}tTimeTaskWakeUp(task
);tTaskSchedRdy(task
); }}if (--currentTask
->slice
== 0) {if (tListCount(&taskTable
[currentTask
->prio
]) > 0) { tListRemoveFirst(&taskTable
[currentTask
->prio
]);tListAddLast(&taskTable
[currentTask
->prio
], &(currentTask
->linkNode
));currentTask
->slice
= TINYOS_SLICE_MAX
;}}tickCount
++;checkCpuUsage();tTaskExitCritical(status
); tTimerModuleTickNotify();tTaskSched();
}
static void cpuUsageSyncWithSysTick
(void)
{while (enableCpuUsageStat
== 0){;;}
}
float tCpuUsageGet
(void)
{float usage
= 0;uint32_t status
= tTaskEnterCritical();usage
= cpuUsage
;tTaskExitCritical(status
);return usage
;
}
tTask tTaskIdle
;
tTaskStack idleTaskEnv
[TINYOS_IDLETASK_STACK_SIZE
];void idleTaskEntry
(void * param
) {tTaskSchedDisable();tInitApp();tTimerInitTask();tSetSysTickPeriod(TINYOS_SYSTICK_MS
);cpuUsageSyncWithSysTick();for (;;){uint32_t status
= tTaskEnterCritical();idleCount
++;tTaskExitCritical(status
);}
}int main
()
{tTaskSchedInit();tTaskDelayedInit();tTimerModuleInit();tTimeTickInit();initCpuUsageStat();tTaskInit(&tTaskIdle
, idleTaskEntry
, (void *)0, TINYOS_PRO_COUNT
- 1, idleTaskEnv
, TINYOS_IDLETASK_STACK_SIZE
);nextTask
= tTaskHighestReady();tTaskRunFirst();return 0;
}
參考資料:
【李述銅】從0到1自己動手寫嵌入式操作系統
總結
以上是生活随笔為你收集整理的CPU使用百分比测量的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。