RTOS UCOSII统计任务堆栈使用/剩余大小及使用率
1、编写统计任务堆栈使用/剩余大小及使用率的函数。
#define OS_TASK_STAT_EN 1u /* Enable (1) or Disable(0) the statistics task */
#define OS_TMR_EN 1u /* Enable (1) or Disable (0) code generation for TIMERS */
/**********************************************************************************************************************************************
* 函数名 : 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任务的宏。

