代码如下 需要开启统计任务并把OS_CFG_DBG_EN 置一
效果如下:
void CPUUsage (void)
{
#if OS_CFG_DBG_EN > 0
CPU_STK_SIZE free;
CPU_STK_SIZE used;
OS_ERR err;
CPU_SR cpu_sr = 0u;
OS_TCB *p_tcb;
CPU_CRITICAL_ENTER();
p_tcb = OSTaskDbgListPtr;
CPU_CRITICAL_EXIT();
printf("\r\n已用栈(B) 剩余栈(B) 栈使用率(%%) 优先级 CPU使用率(%%) CPU最大使用率(%%) 调用次数 任务名\r\n");
for (;;)
{
if (p_tcb != (OS_TCB *)0)
{
OSTaskStkChk(p_tcb, &free, &used, &err);
printf("%4d %4d %3d%% %3d %10.2f%% %10.2f%% %8d %s \r\n",
used, free, (used * 100) / (used + free), p_tcb->Prio,
p_tcb->CPUUsage / 100.0, p_tcb->CPUUsageMax / 100.0, p_tcb->CtxSwCtr, p_tcb->NamePtr);
CPU_CRITICAL_ENTER();
p_tcb = p_tcb->DbgNextPtr; //指向下一个任务的TCB
CPU_CRITICAL_EXIT();
}
else
{
break;
}
}
}
#endif