Bird
Raised Fist0
FreeRTOSprogramming~20 mins

Stack high water mark monitoring in FreeRTOS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Stack Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
Understanding Stack High Water Mark Purpose

What does the stack high water mark value represent in FreeRTOS?

AThe maximum amount of stack space that has been used by the task since it started.
BThe total stack size allocated to the task at creation.
CThe current free stack space available for the task.
DThe number of context switches the task has performed.
Attempts:
2 left
💡 Hint

Think about what 'high water mark' means in terms of usage.

💻 Command Output
intermediate
1:30remaining
Interpreting uxTaskGetStackHighWaterMark Output

Given the following FreeRTOS code snippet, what is the output of uxTaskGetStackHighWaterMark(NULL) if the task stack size is 200 words and the function returns 50?

FreeRTOS
UBaseType_t highWaterMark = uxTaskGetStackHighWaterMark(NULL);
printf("High water mark: %u\n", highWaterMark);
AHigh water mark: 200
BHigh water mark: 50
CHigh water mark: 0
DHigh water mark: 150
Attempts:
2 left
💡 Hint

The function returns the minimum free stack space in words.

❓ Configuration
advanced
1:30remaining
Configuring Stack Overflow Checking

Which FreeRTOS configuration option enables stack overflow checking at runtime?

AconfigUSE_PREEMPTION
BconfigUSE_IDLE_HOOK
CconfigMAX_PRIORITIES
DconfigCHECK_FOR_STACK_OVERFLOW
Attempts:
2 left
💡 Hint

Look for the option related to stack overflow detection.

❓ Troubleshoot
advanced
2:00remaining
Diagnosing Unexpected Low Stack High Water Mark

A task with a stack size of 256 words shows a high water mark of 5. What is the most likely cause?

AThe task is using almost all its stack space, risking overflow.
BThe task has just started and has not used much stack yet.
CThe stack size is too large for the task's needs.
DThe high water mark function is returning the total stack size.
Attempts:
2 left
💡 Hint

Low high water mark means low free stack space.

🔀 Workflow
expert
2:30remaining
Steps to Monitor Stack Usage in a Running FreeRTOS System

What is the correct sequence of steps to monitor stack high water mark for a task in FreeRTOS?

A2,1,3,4
B1,3,2,4
C1,2,3,4
D1,2,4,3
Attempts:
2 left
💡 Hint

Think about the logical order from getting data to acting on it.

Practice

(1/5)
1.

What does the stack high water mark indicate in FreeRTOS?

easy
A. The total stack size allocated to a task
B. The minimum amount of free stack space a task has had
C. The maximum CPU usage of a task
D. The number of tasks currently running

Solution

  1. Step 1: Understand stack high water mark meaning

    The stack high water mark shows the smallest amount of unused stack space a task has had since it started.
  2. Step 2: Compare with other options

    Other options describe CPU usage, total stack size, or task count, which are unrelated to stack high water mark.
  3. Final Answer:

    The minimum amount of free stack space a task has had -> Option B
  4. Quick Check:

    Stack high water mark = minimum free stack space [OK]
Hint: Remember: 'high water mark' means lowest free stack left [OK]
Common Mistakes:
  • Confusing stack size with stack usage
  • Thinking it measures CPU or task count
  • Assuming it shows maximum stack used
2.

Which is the correct way to get the stack high water mark of the current task in FreeRTOS?

?
easy
A. uxTaskGetStackHighWaterMark(NULL);
B. uxTaskGetStackHighWaterMark(currentTask);
C. getStackHighWaterMark(NULL);
D. uxGetStackHighWaterMark();

Solution

  1. Step 1: Recall function signature

    The FreeRTOS function to get stack high water mark is uxTaskGetStackHighWaterMark, which takes a task handle or NULL for current task.
  2. Step 2: Identify correct usage

    Passing NULL gets the current task's high water mark. Other options use wrong function names or parameters.
  3. Final Answer:

    uxTaskGetStackHighWaterMark(NULL); -> Option A
  4. Quick Check:

    Use NULL for current task in uxTaskGetStackHighWaterMark [OK]
Hint: Use NULL to refer to current task handle [OK]
Common Mistakes:
  • Using wrong function names
  • Passing invalid parameters instead of NULL
  • Assuming no parameter needed
3.

Given the following code snippet, what will be the output if the task's minimum free stack space was 50 words?

UBaseType_t highWaterMark = uxTaskGetStackHighWaterMark(NULL);
printf("High water mark: %u\n", highWaterMark);
medium
A. High water mark: 50
B. High water mark: 0
C. High water mark: Stack overflow
D. Compilation error

Solution

  1. Step 1: Understand uxTaskGetStackHighWaterMark output

    This function returns the minimum free stack space (in words) the task had, which is 50 in this case.
  2. Step 2: Analyze printf output

    The printf prints the unsigned integer value returned, so output will be "High water mark: 50".
  3. Final Answer:

    High water mark: 50 -> Option A
  4. Quick Check:

    Function returns minimum free stack, printed as number [OK]
Hint: Function returns minimum free stack words, print as unsigned int [OK]
Common Mistakes:
  • Assuming it returns zero on no overflow
  • Thinking it returns error string
  • Confusing with stack size or usage
4.

Identify the error in this code snippet intended to get the stack high water mark of a task named myTaskHandle:

UBaseType_t mark = uxTaskGetStackHighWaterMark(myTaskHandle);

Assume myTaskHandle is a valid task handle.

medium
A. Return type should be int, not UBaseType_t
B. Function name is incorrect, should be uxGetStackHighWaterMark
C. Parameter should be NULL to get any task's high water mark
D. No error, code is correct

Solution

  1. Step 1: Verify function and parameter usage

    uxTaskGetStackHighWaterMark takes a task handle to get that task's high water mark. Using myTaskHandle is valid.
  2. Step 2: Check return type and function name

    Return type UBaseType_t is correct. Function name is correct as per FreeRTOS API.
  3. Final Answer:

    No error, code is correct -> Option D
  4. Quick Check:

    Correct function and parameter usage means no error [OK]
Hint: Use task handle parameter for specific task, NULL for current task [OK]
Common Mistakes:
  • Thinking NULL is required for all tasks
  • Using wrong function names
  • Confusing return types
5.

You want to monitor stack usage of multiple tasks and log a warning if any task's stack high water mark falls below 20 words. Which approach is best?

hard
A. Only check the current task's stack high water mark using NULL parameter
B. Increase all task stack sizes to 20 words to avoid overflow
C. Periodically call uxTaskGetStackHighWaterMark for each task handle and check if value < 20
D. Use vTaskDelete to remove tasks with low stack

Solution

  1. Step 1: Understand monitoring multiple tasks

    To monitor multiple tasks, you must check each task's stack high water mark individually using their task handles.
  2. Step 2: Implement threshold check

    Calling uxTaskGetStackHighWaterMark for each task and comparing to 20 words allows detecting low stack and logging warnings.
  3. Final Answer:

    Periodically call uxTaskGetStackHighWaterMark for each task handle and check if value < 20 -> Option C
  4. Quick Check:

    Check each task's high water mark against threshold [OK]
Hint: Check each task's high water mark, compare to threshold [OK]
Common Mistakes:
  • Checking only current task misses others
  • Assuming increasing stack size fixes monitoring
  • Deleting tasks instead of warning
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard