养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

时间:2024-11-15 14:53:54

UCOSII为一种RTOS,在创建任务时,为任务分配堆栈空间,岜躲怡镌堆栈分配过多会出现浪费内存,但不影响功能。堆栈分配太小,就会出现HardFa锇栀劐箨ult异常,数组访问越界等等问题,最终导致程序崩溃,因此为任务分配适当的内存非常重要。RTOSUCOSII统计任务堆栈使用/剩余大小及使用率,统计出每个任务堆栈使用情况,然后根据统计情况合理分配堆栈空间。

工具/原料

UCOSIIDemo例程

串口调试助手

USB转TTL接口

方法/步骤

1、编写统计任务堆栈使用/剩余大小及使用率的函数。#defineOS_TASK_S哌囿亡噱TAT_EN1u/*Enable(1)orDisable(0)thestatisticsta霜杼厮贿sk*/#defineOS_TMR_EN1u/*Enable(1)orDisable(0)codegenerationforTIMERS*//***********************************************************************************************************************************************函数名:vAppTask_DebugInfo*描述:应用任务调试信息**********************************************************************************************************************************************/staticvoidvAppTask_DebugInfo(void){ OS_TCB*ptcb=&OSTCBTbl[0];//TableTCB OS_STK_DATAstkDat; printf("************************************AppTaskDebugInfo***********************************\r\n"); printf("PrioUsedFreePerTaskName\r\n"); while(ptcb!=NULL) { OSTaskStkChk(ptcb->OSTCBPrio,&stkDat);//Checktaskstack 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;//PreviousTCBlist } printf("\r\n");}

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

2、使能设置任务名的宏定义OS_TASK_NAME_EN#defineOS_TASK_NAME_EN 1u//Enabletasknames

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

3、设置任务名称OSTaskNameSet()voidOSTaskNameSet(INT8Uprio,INT8U*pname,INT8U*perr)

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

4、统计任务堆栈使用/剩余大小及使用率效打印效果如下。*******涯箨唁峦*****************************AppTaskDebugInfo*********忮氽阝另**************************PrioUsedFreePerTaskName631511311%uC/OS-IIIdle622110716%uC/OS-IIStat02510319%uC/OS-IITmr5661482%Start10663466%USART39277327%USART211277327%IWDG12524852%Queue3277327%Debug

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

5、UCOSII内置任务说明。uC/OS-IIIdle:为UCOSII空闲任务uC/OS-IIStat:为UCOSII统计任务uC/OS-IITmr:为UCOSII软件定时器任务

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

6、补充说明1.uC/OS-IIIdle为必须任务,不可屏蔽。2.uC/OS-IIStat和uC/OS-IITmr为可屏蔽任务,可通过相应的宏使能。3.OS_TMR_EN为使能uC/OS-IITmr任务的宏。4.OS_TASK_STAT_EN为使能uC/OS-IIStat任务的宏。

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

RTOS UCOSII统计任务堆栈使用/剩余大小及使用率

© 一点知识