Bird
Raised Fist0
FreeRTOSprogramming~20 mins

Stack size allocation in FreeRTOS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Stack Size Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this FreeRTOS stack size allocation code?

Consider the following FreeRTOS task creation snippet. What is the stack size allocated to the task in bytes?

FreeRTOS
xTaskCreate(
  vTaskCode,       // Task function
  "Task1",        // Task name
  100,             // Stack size
  NULL,            // Parameters
  1,               // Priority
  NULL             // Task handle
);
A400 bytes
B100 bytes
C100 words (400 bytes on 32-bit system)
D100 bits
Attempts:
2 left
💡 Hint

Remember that FreeRTOS stack size is specified in words, not bytes.

🧠 Conceptual
intermediate
1:30remaining
Why is stack size specified in words in FreeRTOS?

FreeRTOS stack size is given in words, not bytes. Why is this design choice made?

ABecause the stack grows in word-sized units and it is more efficient to count words
BBecause bytes are not supported in embedded systems
CBecause FreeRTOS only supports 16-bit processors
DBecause specifying bytes would cause stack overflow errors
Attempts:
2 left
💡 Hint

Think about how the CPU accesses memory and stack alignment.

🔧 Debug
advanced
2:00remaining
Identify the error in this FreeRTOS stack size allocation

What is wrong with this task creation code regarding stack size?

FreeRTOS
xTaskCreate(
  vTaskCode,
  "Task2",
  512,  // Stack size
  NULL,
  2,
  NULL
);
AStack size is too large and causes memory overflow
BStack size is specified in bytes but FreeRTOS expects words
CStack size is specified in words but the value is too small
DNo error, this is a valid stack size allocation
Attempts:
2 left
💡 Hint

Consider the meaning of the stack size parameter and typical stack sizes.

❓ Predict Output
advanced
1:30remaining
What happens if stack size is set too small in FreeRTOS?

Given a task with stack size set to 10 words, what is the most likely outcome when the task runs?

AStack overflow occurs causing unpredictable behavior or crash
BThe task runs normally without issues
CThe task stack automatically expands to fit needs
DThe task is rejected by the scheduler at creation
Attempts:
2 left
💡 Hint

Think about what happens if the stack is too small for task needs.

🚀 Application
expert
3:00remaining
Calculate total RAM used by three FreeRTOS tasks with different stack sizes

You create three tasks with stack sizes 50, 100, and 150 words respectively on a 32-bit system. How much total RAM in bytes is allocated for their stacks?

A12000 bytes
B1200 bytes
C120 bytes
D1200 words
Attempts:
2 left
💡 Hint

Remember to convert words to bytes and sum all stacks.

Practice

(1/5)
1. What does the stack size parameter specify when creating a FreeRTOS task?
easy
A. The total heap size available to the system
B. The number of tasks that can run simultaneously
C. The amount of memory allocated for the task's temporary data in words
D. The priority level of the task

Solution

  1. Step 1: Understand stack size meaning in FreeRTOS

    The stack size defines how much memory a task can use for its temporary data and function calls.
  2. Step 2: Identify the unit of stack size

    In FreeRTOS, stack size is given in words, not bytes, when creating a task.
  3. Final Answer:

    The amount of memory allocated for the task's temporary data in words -> Option C
  4. Quick Check:

    Stack size = task memory in words [OK]
Hint: Stack size means task memory in words, not bytes [OK]
Common Mistakes:
  • Confusing stack size with heap size
  • Thinking stack size is in bytes
  • Mixing stack size with task priority
2. Which of the following is the correct way to specify stack size when creating a FreeRTOS task in C?
easy
A. xTaskCreate(taskFunction, "Task", 128 / sizeof(int), NULL, 1, NULL);
B. xTaskCreate(taskFunction, "Task", 128 * sizeof(char), NULL, 1, NULL);
C. xTaskCreate(taskFunction, "Task", 128 * sizeof(int), NULL, 1, NULL);
D. xTaskCreate(taskFunction, "Task", 128, NULL, 1, NULL);

Solution

  1. Step 1: Recall stack size unit in FreeRTOS

    Stack size is specified in words, so just giving 128 means 128 words.
  2. Step 2: Analyze each option

    xTaskCreate(taskFunction, "Task", 128, NULL, 1, NULL); uses 128 words directly, which is correct. xTaskCreate(taskFunction, "Task", 128 * sizeof(char), NULL, 1, NULL); and C multiply by size, which is incorrect. xTaskCreate(taskFunction, "Task", 128 / sizeof(int), NULL, 1, NULL); divides, which is also wrong.
  3. Final Answer:

    xTaskCreate(taskFunction, "Task", 128, NULL, 1, NULL); -> Option D
  4. Quick Check:

    Stack size = number of words, no sizeof needed [OK]
Hint: Use stack size as word count, no sizeof multiplication [OK]
Common Mistakes:
  • Multiplying stack size by sizeof(int)
  • Dividing stack size by sizeof(int)
  • Confusing bytes and words in stack size
3. Given the code snippet:
void vTaskCode(void * pvParameters) {
    int x = 0;
    for(int i = 0; i < 10; i++) {
        x += i;
    }
    vTaskDelete(NULL);
}

xTaskCreate(vTaskCode, "Task1", 50, NULL, 2, NULL);

What is the minimum stack size allocation (in words) to safely run this task without overflow?
medium
A. 50 words
B. 10 words
C. 100 words
D. 5 words

Solution

  1. Step 1: Analyze task stack usage

    The task uses a few local variables (x, i) and a small loop. This requires some stack but not very large.
  2. Step 2: Check stack size given

    The task is created with 50 words stack size, which is enough for simple local variables and loop.
  3. Final Answer:

    50 words -> Option A
  4. Quick Check:

    Simple task needs moderate stack, 50 words is safe [OK]
Hint: Simple tasks need tens of words, not just a few [OK]
Common Mistakes:
  • Assuming 10 words is enough for loop variables
  • Overestimating stack need as 100 words
  • Underestimating stack causing overflow
4. You have a FreeRTOS task created with stack size 20 words, but it crashes with stack overflow. What is the best fix?
medium
A. Decrease the stack size to save memory
B. Increase the stack size to a larger value like 100 words
C. Change the task priority to higher
D. Remove local variables from the task

Solution

  1. Step 1: Identify cause of crash

    Stack overflow means the task's stack is too small for its needs.
  2. Step 2: Choose appropriate fix

    Increasing stack size to a larger value like 100 words prevents overflow safely.
  3. Final Answer:

    Increase the stack size to a larger value like 100 words -> Option B
  4. Quick Check:

    Stack overflow fix = increase stack size [OK]
Hint: Stack overflow? Increase stack size [OK]
Common Mistakes:
  • Reducing stack size to save memory
  • Changing priority instead of stack size
  • Ignoring local variables impact
5. You want to create two FreeRTOS tasks: Task A needs 80 words stack, Task B needs 40 words stack. The total heap is 100 words. How should you allocate stack sizes to avoid crashes and minimize wasted memory?
hard
A. Allocate 60 words to Task A and 40 words to Task B
B. Allocate 80 words to Task A and 40 words to Task B
C. Allocate 80 words to Task A and 20 words to Task B
D. Allocate 50 words to each task

Solution

  1. Step 1: Understand total heap limit

    Total heap is 100 words, so sum of stack sizes must not exceed 100.
  2. Step 2: Allocate stack sizes within limit

    Task A needs 80 words ideally, Task B needs 40 words, total 120 words which is over heap.
  3. Step 3: Adjust allocation to fit heap

    Reduce Task A to 60 words and keep Task B at 40 words to fit 100 words total.
  4. Final Answer:

    Allocate 60 words to Task A and 40 words to Task B -> Option A
  5. Quick Check:

    Sum stack ≤ heap, adjust sizes accordingly [OK]
Hint: Sum stack sizes ≤ heap size to avoid crashes [OK]
Common Mistakes:
  • Allocating more stack than heap allows
  • Ignoring total heap limit
  • Splitting stack sizes evenly without need
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