1、编写统计任务堆栈使用/剩余大小及使用率的函数。#defineOS_TASK_S哌囿亡噱TAT_EN1u/*Enable(1)orDisable(0)thestatisticstask*/#defineOS_TMR_EN1u/*Enable(1)orDisable(0)codegenerationforTIMERS*//*********************************************************************************************************************************************** 函数名 : vAppTask_DebugInfo* 描 述 : 应用任务调试信息**********************************************************************************************************************************************/static void vAppTask_DebugInfo(void){ OS_TCB * ptcb = &OSTCBTbl[0];//Table TCB OS_STK_DATA stkDat; printf("************************************ App Task Debug Info ***********************************\r\n"); printf(" Prio Used Free Per TaskName\r\n"); while (ptcb != NULL) { OSTaskStkChk(ptcb->OSTCBPrio, &stkDat);//Check task stack printf(" %2d %5d %5d %02d%% %s\r\n", ptcb->OSTCBPrio, stkDat.OSUsed, stkDat.OSFree, (stkDat.OSUsed * 100)/(stkDat.OSUsed + stkDat.OSFree), ptcb->OSTCBTaskName); ptcb = ptcb->OSTCBPrev;//Previous TCB list } printf("\r\n");}
2、使能设置任务名的宏定义OS_TASK_NAME_EN#define OS_TASK_NAME_EN 1u//Enable task names
3、设置任务名称OSTaskNameSet()void OSTaskNameSet(INT8U prio, INT8U *pname, INT8U *perr)
4、统计任务堆栈使用/剩余大小及使用率效打印效果如下。*******涯箨唁峦***************************** App Task Debug Info *********忮氽阝另************************** Prio Used Free Per TaskName 63 15 113 11% uC/OS-II Idle 62 21 107 16% uC/OS-II Stat 0 25 103 19% uC/OS-II Tmr 5 66 14 82% Start 10 66 34 66% USART3 9 27 73 27% USART2 11 27 73 27% IWDG 12 52 48 52% Queue 3 27 73 27% Debug
5、UCOSII内置任务说明。uC/OS-II Idle : 为UCOSII空闲任务uC/OS-II Stat : 为UCOSII统计任务uC/OS-II Tmr : 为UCOSII软件定时器任务
6、补充说明1.uC/OS-II Idle为必须任务,不可屏蔽。2.uC/OS-II Stat和uC/OS-II Tmr为可屏蔽任务,可通过相应的宏使能。3.OS_TMR_EN为使能uC/OS-II Tmr任务的宏。4.OS_TASK_STAT_EN为使能uC/OS-II Stat任务的宏。