微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ucos iii 任务栈使用率统计方法

第一步、使能任务统计功能

修改文件 os_cfg.h中的 OS_CFG_STAT_TASK_STK_CHK_EN宏。

                                                           /* -------------------------- TASK MANAGEMENT -------------------------- */
#define OS_CFG_STAT_TASK_EN             DEF_ENABLED        /* Enable (DEF_ENABLED) the statistics task                              */
#define OS_CFG_STAT_TASK_STK_CHK_EN     DEF_ENABLED        /*     Check task stacks (DEF_ENABLED) from the statistic task           */

第二步、创建任务时开启任务统计功能

创建任务函数如下:

void  OSTaskCreate (OS_TCB        *p_tcb,
                    cpu_CHAR const*p_name,
                    OS_TASK_PTR    p_task,
                    void          *p_arg,
                    OS_PRIO        prio,
                    cpu_STK       *p_stk_base,
                    cpu_STK_SIZE   stk_limit,
                    cpu_STK_SIZE   stk_size,
                    OS_MSG_QTY     q_size,
                    OS_TICK        time_quanta,
                    void          *p_ext,
                    OS_OPT         opt,
                    OS_ERR        *p_err)

倒数第二个形参opt,参数可选择如下:

*              opt            contains additional information (or options) about the behavior of the task.
*                             See OS_OPT_TASK_xxx in OS.H.  Current choices are:
*
*                                 OS_OPT_TASK_NONE            No option selected
*                                 OS_OPT_TASK_STK_CHK         Stack checking to be allowed for the task
*                                 OS_OPT_TASK_STK_CLR         Clear the stack when the task is created
*                                 OS_OPT_TASK_SAVE_FP         If the cpu has floating-point registers, save them
*                                                             during a context switch.
*                                 OS_OPT_TASK_NO_TLS          If the caller doesn't want or need TLS (Thread Local
*                                                             Storage) support for the task.  If you do not include this
*                                                             option, TLS will be supported by default.

则在创建任务时加入 OS_OPT_TASK_STK_CHK标志,则任务在创建时会开启统计功能

第三步、获取任务统计信息

函数如下:

/*
************************************************************************************************************************
*                                                    STACK CHECKING
*
* Description: This function is called to calculate the amount of free memory left on the specified task's stack.
*
* Arguments  : p_tcb       is a pointer to the TCB of the task to check.  If you specify a NULL pointer then
*                          you are specifying that you want to check the stack of the current task.
*
*              p_free      is a pointer to a variable that will receive the number of free 'entries' on the task's stack.
*
*              p_used      is a pointer to a variable that will receive the number of used 'entries' on the task's stack.
*
*              p_err       is a pointer to a variable that will contain an error code.
*
*                              OS_ERR_NONE               Upon success
*                              OS_ERR_PTR_INVALID        If either 'p_free' or 'p_used' are NULL pointers
*                              OS_ERR_TASK_NOT_EXIST     If the stack pointer of the task is a NULL pointer
*                              OS_ERR_TASK_OPT           If you did NOT specified OS_OPT_TASK_STK_CHK when the task
*                                                        was created
*                              OS_ERR_TASK_STK_CHK_ISR   You called this function from an ISR
*
* Returns    : none
*
* Note(s)    : none
************************************************************************************************************************
*/

void  OSTaskStkChk (OS_TCB        *p_tcb,
                    cpu_STK_SIZE  *p_free,
                    cpu_STK_SIZE  *p_used,
                    OS_ERR        *p_err);
  • p_tcb:所需信息的任务控制块
  • p_free:指针变量,保存当前任务控制块的剩余任务栈
  • p_used:指针变量,保存当前任务控制块的使用任务栈

p_free和p_used的和就是创建任务时设置的任务栈总大小。

原文地址:https://www.jb51.cc/wenti/3280018.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐