Bird
Raised Fist0
FreeRTOSprogramming~5 mins

xTaskCreate() function in FreeRTOS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the xTaskCreate() function in FreeRTOS?
The xTaskCreate() function is used to create a new task and add it to the list of tasks that are ready to run in FreeRTOS.
Click to reveal answer
beginner
What are the main parameters of xTaskCreate()?
The main parameters are: the task function pointer, a name for the task, stack size in words, a pointer to parameters passed to the task, task priority, and a handle to the created task.
Click to reveal answer
beginner
What does the return value of xTaskCreate() indicate?
It returns pdPASS if the task was created successfully, or errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY if the task creation failed (usually due to insufficient memory).
Click to reveal answer
intermediate
Why is the stack size parameter important in xTaskCreate()?
The stack size defines how much memory the task has for its local variables and function calls. Too small a stack can cause crashes, too large wastes memory.
Click to reveal answer
intermediate
Can xTaskCreate() be called from an interrupt service routine (ISR)?
No, xTaskCreate() must be called from a task context, not from an ISR. For creating tasks from ISRs, other mechanisms are needed.
Click to reveal answer
What does xTaskCreate() return when a task is created successfully?
ApdPASS
BpdFAIL
CNULL
D0
Which parameter of xTaskCreate() specifies the task's priority?
ATask function pointer
BTask priority
CStack size
DTask name
Is it safe to call xTaskCreate() inside an interrupt service routine (ISR)?
AOnly if interrupts are disabled
BYes, always
CNo, never
DOnly for low priority tasks
What happens if the stack size given to xTaskCreate() is too small?
ATask runs faster
BTask priority increases
CTask uses less CPU
DTask may crash or behave unpredictably
Which of these is NOT a parameter of xTaskCreate()?
ATask timeout
BTask name
CTask function pointer
DTask handle pointer
Explain how to use xTaskCreate() to create a new task in FreeRTOS.
Think about what each parameter means and what the function returns.
You got /7 concepts.
    Describe why choosing the correct stack size is important when creating a task with xTaskCreate().
    Consider what happens if the stack is too small or too big.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the xTaskCreate() function in FreeRTOS?
      easy
      A. To start a new task that runs concurrently with others
      B. To delete an existing task
      C. To pause the scheduler temporarily
      D. To allocate memory for variables

      Solution

      1. Step 1: Understand the role of xTaskCreate()

        This function is designed to create and start a new task in FreeRTOS, allowing multitasking.
      2. Step 2: Compare with other options

        Deleting tasks, pausing the scheduler, or allocating memory are handled by different functions, not xTaskCreate().
      3. Final Answer:

        To start a new task that runs concurrently with others -> Option A
      4. Quick Check:

        Task creation = start new task [OK]
      Hint: xTaskCreate always starts a new task [OK]
      Common Mistakes:
      • Confusing task creation with task deletion
      • Thinking it pauses the scheduler
      • Assuming it allocates general memory
      2. Which of the following is the correct syntax for xTaskCreate() in FreeRTOS?
      easy
      A. xTaskCreate(TaskFunction, "Name", StackSize, Parameters, Priority);
      B. xTaskCreate(TaskFunction, Name, StackSize, Parameters, Priority, TaskHandle);
      C. xTaskCreate(TaskFunction, "Name", StackSize, Parameters, Priority, TaskHandle);
      D. xTaskCreate(TaskFunction, "Name", StackSize, Parameters, Priority, &TaskHandle);

      Solution

      1. Step 1: Recall the correct parameter list

        The correct syntax requires the task function, a string name in quotes, stack size, parameters, priority, and a pointer to the task handle.
      2. Step 2: Check each option carefully

        xTaskCreate(TaskFunction, "Name", StackSize, Parameters, Priority, &TaskHandle); matches the correct syntax exactly, including quotes around the name and the address-of operator for the task handle.
      3. Final Answer:

        xTaskCreate(TaskFunction, "Name", StackSize, Parameters, Priority, &TaskHandle); -> Option D
      4. Quick Check:

        Correct syntax includes &TaskHandle [OK]
      Hint: Task name must be a string and handle passed by address [OK]
      Common Mistakes:
      • Forgetting quotes around the task name
      • Passing task handle without & operator
      • Omitting the task handle parameter
      3. Consider the following code snippet:
      void vTaskCode(void * pvParameters) {
          for(;;) {
              // Task code here
          }
      }
      
      int main() {
          TaskHandle_t xHandle = NULL;
          BaseType_t result = xTaskCreate(vTaskCode, "Task1", 1000, NULL, 2, &xHandle);
          if(result == pdPASS) {
              // Task created successfully
          }
          return 0;
      }

      What is the value of result if the task is created successfully?
      medium
      A. pdPASS
      B. pdFAIL
      C. NULL
      D. 1

      Solution

      1. Step 1: Understand xTaskCreate() return values

        This function returns pdPASS if the task was created successfully, otherwise pdFAIL.
      2. Step 2: Analyze the code logic

        The code checks if result == pdPASS to confirm success, so result must be pdPASS on success.
      3. Final Answer:

        pdPASS -> Option A
      4. Quick Check:

        Success return = pdPASS [OK]
      Hint: Success returns pdPASS, failure returns pdFAIL [OK]
      Common Mistakes:
      • Confusing pdPASS with pdFAIL
      • Assuming NULL or 1 as success
      • Not checking the return value
      4. Identify the error in this xTaskCreate() usage:
      TaskHandle_t xHandle;
      BaseType_t result = xTaskCreate(vTaskCode, "Task2", 500, NULL, 1, xHandle);
      medium
      A. Priority must be zero
      B. Task name should not be in quotes
      C. Missing & before xHandle in last parameter
      D. Stack size is too large

      Solution

      1. Step 1: Check the task handle parameter

        The last parameter must be a pointer to the task handle variable, so it requires the address operator &.
      2. Step 2: Verify other parameters

        The task name is correctly a string in quotes, stack size 500 is valid, and priority 1 is allowed.
      3. Final Answer:

        Missing & before xHandle in last parameter -> Option C
      4. Quick Check:

        Task handle needs & operator [OK]
      Hint: Always pass &TaskHandle, not TaskHandle alone [OK]
      Common Mistakes:
      • Passing task handle without &
      • Removing quotes from task name
      • Incorrect assumptions about stack size or priority
      5. You want to create two tasks with different priorities using xTaskCreate(). Which code snippet correctly creates both tasks and stores their handles?
      hard
      A. TaskHandle_t handle1, handle2; xTaskCreate(Task1, "Task1", 1000, NULL, 5, handle1); xTaskCreate(Task2, "Task2", 1000, NULL, 3, handle2);
      B. TaskHandle_t handle1, handle2; xTaskCreate(Task1, "Task1", 1000, NULL, 3, &handle1); xTaskCreate(Task2, "Task2", 1000, NULL, 5, &handle2);
      C. TaskHandle_t handle1, handle2; xTaskCreate(Task1, Task1, 1000, NULL, 3, &handle1); xTaskCreate(Task2, Task2, 1000, NULL, 5, &handle2);
      D. TaskHandle_t handle1, handle2; xTaskCreate(Task1, "Task1", 1000, NULL, 3, &handle2); xTaskCreate(Task2, "Task2", 1000, NULL, 5, &handle1);

      Solution

      1. Step 1: Verify task handle usage

        Each task handle must be passed by address using &. TaskHandle_t handle1, handle2; xTaskCreate(Task1, "Task1", 1000, NULL, 3, &handle1); xTaskCreate(Task2, "Task2", 1000, NULL, 5, &handle2); correctly does this for both handles.
      2. Step 2: Check task names and priorities

        Task names are strings in quotes. Priorities differ (3 and 5) as required. TaskHandle_t handle1, handle2; xTaskCreate(Task1, "Task1", 1000, NULL, 3, &handle1); xTaskCreate(Task2, "Task2", 1000, NULL, 5, &handle2); matches this correctly.
      3. Step 3: Confirm no parameter mix-ups

        TaskHandle_t handle1, handle2; xTaskCreate(Task1, "Task1", 1000, NULL, 5, handle1); xTaskCreate(Task2, "Task2", 1000, NULL, 3, handle2); misses & operator. TaskHandle_t handle1, handle2; xTaskCreate(Task1, Task1, 1000, NULL, 3, &handle1); xTaskCreate(Task2, Task2, 1000, NULL, 5, &handle2); uses function names instead of strings for task names. TaskHandle_t handle1, handle2; xTaskCreate(Task1, "Task1", 1000, NULL, 3, &handle2); xTaskCreate(Task2, "Task2", 1000, NULL, 5, &handle1); swaps handles incorrectly.
      4. Final Answer:

        TaskHandle_t handle1, handle2; xTaskCreate(Task1, "Task1", 1000, NULL, 3, &handle1); xTaskCreate(Task2, "Task2", 1000, NULL, 5, &handle2); -> Option B
      5. Quick Check:

        Correct handles and priorities = TaskHandle_t handle1, handle2; xTaskCreate(Task1, "Task1", 1000, NULL, 3, &handle1); xTaskCreate(Task2, "Task2", 1000, NULL, 5, &handle2); [OK]
      Hint: Pass &handle for each task, use quoted names, set priorities properly [OK]
      Common Mistakes:
      • Passing handles without &
      • Using function names instead of string names
      • Mixing up handles between tasks
      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