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