Bird
Raised Fist0
FreeRTOSprogramming~10 mins

xTaskCreate() function in FreeRTOS - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a FreeRTOS task named "Task1".

FreeRTOS
xTaskCreate([1], "Task1", 100, NULL, 1, NULL);
Drag options to blanks, or click blank then click option'
AvTaskFunction
BTaskHandle_t
CxTaskCreate
DvTaskStartScheduler
Attempts:
3 left
💡 Hint
Common Mistakes
Using the task handle type instead of the function name.
Calling xTaskCreate instead of passing the function pointer.
2fill in blank
medium

Complete the code to set the stack size of the task to 256 words.

FreeRTOS
xTaskCreate(TaskFunction, "Task2", [1], NULL, 2, NULL);
Drag options to blanks, or click blank then click option'
A128
B512
C64
D256
Attempts:
3 left
💡 Hint
Common Mistakes
Confusing bytes with words for stack size.
Using too small or too large stack size without reason.
3fill in blank
hard

Fix the error in the priority argument to create a high priority task.

FreeRTOS
xTaskCreate(TaskFunction, "Task3", 200, NULL, [1], NULL);
Drag options to blanks, or click blank then click option'
A0
BconfigMAX_PRIORITIES
CconfigMAX_PRIORITIES - 1
D-1
Attempts:
3 left
💡 Hint
Common Mistakes
Using configMAX_PRIORITIES directly causes error.
Using negative priority values.
4fill in blank
hard

Fill both blanks to create a task with a handle and check if creation was successful.

FreeRTOS
TaskHandle_t [1] = NULL;
BaseType_t result = xTaskCreate(TaskFunction, "Task4", 150, NULL, 1, [2]);
if (result == pdPASS) {
    // Task created successfully
}
Drag options to blanks, or click blank then click option'
AtaskHandle
BNULL
C&taskHandle
DtaskFunction
Attempts:
3 left
💡 Hint
Common Mistakes
Passing NULL instead of the address of the handle variable.
Not declaring a handle variable before use.
5fill in blank
hard

Fill all three blanks to create a task with a parameter, priority 3, and store its handle.

FreeRTOS
int param = 10;
TaskHandle_t [1] = NULL;
BaseType_t result = xTaskCreate(TaskFunction, "Task5", 120, [2], [3], &taskHandle);
Drag options to blanks, or click blank then click option'
AtaskHandle
B&param
C3
Dparam
Attempts:
3 left
💡 Hint
Common Mistakes
Passing the address of param instead of param itself.
Mixing up priority and parameter arguments.
Not storing the task handle.

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