Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Description

OSTaskStkChk() determines a task’s stack statistics. Specifically, it computes the amount of free stack space, as well as the amount of stack space used by the specified task. This function requires that the task be created with the the OS_TASK_OPT_STK_CHK and  and OS_TASK_OPT_STK_CLR options options.anchor

10535671053567Stack sizing is accomplished by walking from the bottom of the stack and counting the number of of 0 entries  entries on the stack until a non-zero value is found. Anchor10633141063314

It is possible to not set the the OS_TASK_OPT_STK_CLR when  when creating the task if the startup code clears all RAM, and tasks are not deleted (this reduces the execution time of of OSTaskCreate()).

Anchor10059591005959µC/OS-III’s statistic task calls calls OSTaskStkChk() for  for each task created and stores the results in each task’s task’s OS_TCB so  so your application doesn’t need to call this function if the statistic task is enabled. Anchor10059601005960 Arguments Anchor10059611005961 p_tcb Anchor10059631005963

Files

os.h/os_task.c

Prototype

Code Block
void  OSTaskStkChk (OS_TCB        *p_tcb,
                    CPU_STK_SIZE  *p_free,
                    CPU_STK_SIZE  *p_used,
                    OS_ERR        *p_err)

Arguments

p_tcb

is a pointer to the TCB of the task where the stack is being checked. A NULL pointer indicates that the user is checking the calling task’s stack.

...

p_free Anchor10059661005966

is a pointer to a variable of type CPU_STK_SIZE and will contain the number of free CPU_STK elements on the stack of the task being inquired about.

...

p_used Anchor10633541063354

is a pointer to a variable of type CPU_STK_SIZE and will contain the number of used CPU_STK elements on the stack of the task being inquired about.

Anchor10633551063355p_err Anchor10059721005972

is a pointer to a variable that will contain an error code returned by this function.

...

classWebWorks_Indent_1

...

...

OS_ERR_NONE

...

classWebWorks_Indent_2

...

If the call was successful.

...

...

classWebWorks_Indent_1

...

OS_ERR_PTR_INVALID

...

classWebWorks_Indent_2

...

If OS_CFG_ARG_CHK_EN is set to

...

DEF_ENABLED in os_cfg.h: if either p_free or p_used are NULL pointers.

...

classWebWorks_Indent_1

...

OS_ERR_TASK_NOT_EXIST

...

classWebWorks_Indent_2

...

If the stack pointer of the task is a NULL pointer.

...

...

classWebWorks_Indent_1

...

OS_ERR_TASK_OPT

...

classWebWorks_Indent_2

...

If OS_OPT_TASK_STK_CHK

...

was not specififed

...

when creating the task being checked.

...

...

OS_ERR_TASK_STK_CHK_ISR

...

classWebWorks_Indent_2

...

If OS_CFG_CALLED_FROM_ISR_CHK_EN set to

...

DEF_ENABLED in os_cfg.h: if calling this function from an ISR.

...

Returned Value

anchorNone10059841005984 None Anchor10504151050415

Required Configuration

OS_CFG_TASK_STAT_CHK_EN must be enabled in os_cfg.h. Refer to µC-OS-III Configuration Manual.

Callers

Application.

Notes/Warnings

...

  1. Execution time of this task depends on the size of the task’s stack.

...

  1. The application can determine the total task stack space (in number of CPU_STK elements) by adding the value of *p_free and *p_used. This number should add up to the task’s stack size which is stored in the .StkSize field of the OS_TCB of the task.

...

  1. The

...

  1. #define CPU_CFG_STK_GROWTH must be declared (typically from os_cpu.h). When this #define is set to CPU_STK_GROWTH_LO_TO_HI, the stack grows from low memory to high memory. When this #define is set to CPU_STK_GROWTH_HI_TO_LO, the stack grows from high memory to low memory.

...

...

Example Usage

...

Code Block

...

OS_TCB MyTaskTCB;     void Task (void *p_arg) { OS_ERR err; CPU_STK_SIZE n_free; CPU_STK_SIZE n_used;     while

              while (DEF_ON)
{ : : OSTaskStkChk(&MyTaskTCB, &n_free, &n_used, &err); /* Check “err” */ : : } }tr
 {
                  :
                  :
                  OSTaskStkChk(&MyTaskTCB,
                               &n_free,
                               &n_used,
                               &err);
                  /* Check "err" */
                  :
                  :
              }
          }
HTML Table
summary
classCode_Listing
Table Row (tr)
Table Cell (td)
rowspan19
Anchor
10059951005995
Anchor
10059961005996
Anchor
10059971005997
Anchor
10059981005998
Anchor
10059991005999
Anchor
10060001006000
Anchor
10060011006001
Anchor
10060021006002
Anchor
10060031006003
Anchor
10060041006004
Anchor
10060051006005
titleOSTaskStkChk() example usage
          OS_TCB  MyTaskTCB;
           
           
          void Task (void *p_arg)
          {
              OS_ERR        err;
              CPU_STK_SIZE  n_free;
              CPU_STK_SIZE  n_used;
           
           
              (void)&p_arg;
Anchor
10060061006006
Anchor
10060071006007
Anchor
10060081006008
Anchor
10060091006009
Anchor
10060101006010
Anchor
10060111006011
Anchor
10060121006012
Anchor
10060131006013
Anchor
10060141006014
Anchor
10060151006015
Anchor
10060161006016
Anchor
10060171006017
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)