uC/OS-III統計任務堆疊、CPU使用率
阿新 • • 發佈:2019-02-19
1、讀取任務堆疊使用函式
OSTaskStkChk(&TaskBStkTCB,&stk_free,&stk_used,&err);
Void OSTaskStkChk(OS_TCB *p_tcb,CPU_STK_SIZE* p_free,CPU_STK_SIZE*p_used,OS_ERR *p_err);
呼叫上面這個函式就能獲取到指定任務的堆疊使用量。其中
*p_tcb:指向任務的TCB塊
*p_free:任務空閒的堆疊位元組數
*p_used:任務使用的堆疊位元組數
*p_err:函式執行結果程式碼
特別提示,如果想要使用這個功能,那麼必須在os_cfg.h這個作業系統配置檔案中開啟巨集:
#define OS_CFG_STAT_TASK_STK_CHK_EN 1u /* Check task stacks from statistic task
OSTaskStkChk(&Core_Page_TCB,&free,&used,&err);
printf("Core_Pageused/free:%d/%d usage:%%%d\r\n",used,free,(used*100)/(used+free));
2、用系統OS_TCB讀取統計任務堆疊、CPU使用率
Static void DispTaskInfo() { OS_TCB *p_tcb; OS_ERR err; CPU_SR_ALLOC(); CPU_CRITICAL_ENTER(); p_tcb = OSTaskDbgListPtr; CPU_CRITICAL_EXIT(); While( p_tcb != (OS_TCB *) 0 ){ TaskCPU = (float) p_tcb -> CPUUsage / 100;//追蹤任務的CPU使用率 freeStk = p_tcb -> StkFree;//空閒堆疊,任務尚未使用的堆疊 usedStk = p_tcb -> StkUsed;//已使用的堆疊(任務堆疊的最大使用量) strcpy( task_name, p_tcb -> NamePtr);//任務名 CUP_ALL = (float) OSStatTaskCPUUsage / 100; //應用程式的CPU總的使用率 CPU_CRITICAL_ENTER(); p_tcb = p_tcb -> DbgNextPtr; //指向下一個任務的TCB CPU_CRITICAL_EXIT(); } }
3、uC/OS-III的統計任務由OS_CFG_STAT_TASK_EN(在os_cfg.h中)控制
在main()函式建立的第一個也是唯一一個應用任務中呼叫
OSStatTaskCPUUsageInit(),
只能在呼叫OSStatTaskCPUUsageInit()函式之後才能建立其他任務
OSStatTaskCPUUsage這個變量表示應用程式的CPU總的使用率