1. 程式人生 > >uC/OS-III統計任務堆疊、CPU使用率

uC/OS-III統計任務堆疊、CPU使用率

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總的使用率