1、首先要知道一点,ucos有两种创建任务的方法,分为OSTaskCreate()和OSTaskCreateExt()、两者都可以创建任务,OSTaskCreateExt()比前者特点就是允许用户设置更多的细节,如果想测量任务的堆栈大小,必须使用OSTaskCreateExt()创建任务,OSTaskCreate是无法测量的; 2、将需要测量堆栈任务的创建函数后面,要加上OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR,也就是OSTaskCreateExt()函数的最后一个opt参数,截图如下: 3、在需要测量堆栈任务的函数里面调用OSTaskStkChk()函数,例如下图所示: 其中:“ucErr”:为函数返回状态 “2”:为调用该函数的任务优先级(也就是需要测量堆栈使用大小的优先级) “stk_data”:为存储结果的结构体(需提前定义,定义方法:OS_STK_DATA stk_data;) 4、 OS_STK_DATA结构体包含两个参数,"OSFree"为堆栈中未使用的字节数,"OSUsed“为堆栈中已使用的字节数;
5、还要注意,要将以下宏定义设置为1 #define OS_TASK_CREATE_EXT_EN 1 #define OS_TASK_OPT_STK_CLR 1
6、 读取后根据自己习惯选择读取方法,debug打断点窗口看或串口打印出来都可以,我的读取结果如下(单位:字节): 建议堆栈使用率在50%~80%,太小了浪费空间,太大了有些危险,像我这种28%( 0x484 / ( 0x484 + 0xB7C ) ≈ 28%)目前就很浪费~ 瑞思拜~
|