Bird
Raised Fist0
FreeRTOSprogramming~5 mins

Task function signature in FreeRTOS

Choose your learning style10 modes available
Introduction

Task functions are the main code blocks that run in FreeRTOS tasks. They need a specific format so the system can run them properly.

When creating a new task to run code concurrently.
When defining what a task should do when it starts.
When passing a function to FreeRTOS to manage as a task.
When organizing code to run in separate threads on a microcontroller.
Syntax
FreeRTOS
void TaskName(void *pvParameters)

The function must return void because tasks do not return values.

The parameter void *pvParameters allows passing any data to the task.

Examples
Basic task function with no return and a generic parameter pointer.
FreeRTOS
void vTaskCode(void *pvParameters) {
    // Task code here
}
Task function that receives a pointer to an integer parameter and uses it.
FreeRTOS
void SensorTask(void *pvParameters) {
    int sensorId = *(int *)pvParameters;
    // Use sensorId in task
}
Sample Program

This program creates a FreeRTOS task named "ExampleTask" that prints its name every second. The task function uses the parameter to know its name.

FreeRTOS
#include "FreeRTOS.h"
#include "task.h"
#include <stdio.h>

void vTaskExample(void *pvParameters) {
    const char *taskName = (const char *)pvParameters;
    for (;;) {
        printf("Running task: %s\n", taskName);
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

int main(void) {
    const char *name = "Task1";
    xTaskCreate(vTaskExample, "ExampleTask", 1000, (void *)name, 1, NULL);
    vTaskStartScheduler();
    for(;;); // Should never reach here
    return 0;
}
OutputSuccess
Important Notes

Task functions must never return; they usually run an infinite loop.

Always cast pvParameters to the correct pointer type before use.

Summary

Task functions have the signature void TaskName(void *pvParameters).

They run code inside an infinite loop and do not return.

The pvParameters pointer lets you pass any data to the task.

Practice

(1/5)
1.

What is the correct signature for a FreeRTOS task function?

easy
A. int TaskName(int param)
B. void TaskName(void *pvParameters)
C. void TaskName()
D. void TaskName(int *param)

Solution

  1. Step 1: Recall FreeRTOS task function signature

    FreeRTOS tasks must have the signature with return type void and a single void pointer parameter.
  2. Step 2: Match the signature with options

    Only void TaskName(void *pvParameters) matches void TaskName(void *pvParameters) exactly.
  3. Final Answer:

    void TaskName(void *pvParameters) -> Option B
  4. Quick Check:

    Task signature = void TaskName(void *pvParameters) [OK]
Hint: Task functions always return void and take void* parameter [OK]
Common Mistakes:
  • Using int return type instead of void
  • Omitting the void* parameter
  • Using incorrect parameter types
2.

Which of the following is a syntactically correct FreeRTOS task function declaration?

void MyTask(_____)
easy
A. void *pvParameters
B. int param
C. char *name
D. void

Solution

  1. Step 1: Understand parameter type for FreeRTOS tasks

    Task functions must accept a single parameter of type void *.
  2. Step 2: Check each option

    Only void *pvParameters uses void *pvParameters, which is correct syntax.
  3. Final Answer:

    void *pvParameters -> Option A
  4. Quick Check:

    Parameter type = void *pvParameters [OK]
Hint: Task parameter must be void pointer (void*) [OK]
Common Mistakes:
  • Using int or char pointer instead of void pointer
  • Using void without pointer
  • Missing parameter entirely
3.

What will happen if you run this FreeRTOS task function?

void ExampleTask(void *pvParameters) {
    for(;;) {
        // Task code here
    }
}
medium
A. The task will return a value causing runtime error.
B. The task will run once and then exit.
C. The task will cause a compile error.
D. The task will run repeatedly in an infinite loop.

Solution

  1. Step 1: Analyze the task function loop

    The task contains a for(;;) infinite loop, so it runs repeatedly.
  2. Step 2: Understand FreeRTOS task behavior

    Tasks should not return; they run inside infinite loops to keep running.
  3. Final Answer:

    The task will run repeatedly in an infinite loop. -> Option D
  4. Quick Check:

    Infinite loop in task = runs repeatedly [OK]
Hint: FreeRTOS tasks run inside infinite loops [OK]
Common Mistakes:
  • Thinking task runs once and exits
  • Expecting return value from task
  • Confusing infinite loop with error
4.

Identify the error in this FreeRTOS task function:

void FaultyTask(void *pvParameters) {
    int count = 0;
    while(count < 5) {
        count++;
    }
    return;
}
medium
A. The function should not return; it must loop forever.
B. The parameter type is incorrect.
C. The variable count should be a pointer.
D. The while loop condition is invalid syntax.

Solution

  1. Step 1: Check task function return behavior

    FreeRTOS tasks must not return; they should run inside infinite loops.
  2. Step 2: Analyze the code flow

    This task loops 5 times then returns, which is incorrect for FreeRTOS tasks.
  3. Final Answer:

    The function should not return; it must loop forever. -> Option A
  4. Quick Check:

    Tasks must not return, use infinite loop [OK]
Hint: Tasks must never return; use infinite loops [OK]
Common Mistakes:
  • Allowing task to return
  • Changing parameter type incorrectly
  • Misunderstanding loop conditions
5.

You want to pass an integer value to a FreeRTOS task. Which is the correct way to define and use the task function?

void NumberTask(_____)
{
    int received = *(int *)pvParameters;
    for(;;) {
        // Use received value
    }
}
hard
A. void pvParameters
B. int pvParameters
C. void *pvParameters
D. int *pvParameters

Solution

  1. Step 1: Recall task function parameter type

    Task functions must accept a void * parameter to allow any data type.
  2. Step 2: Understand data passing

    The integer is passed via pointer cast from void *, so parameter must be void *pvParameters.
  3. Final Answer:

    void *pvParameters -> Option C
  4. Quick Check:

    Use void* parameter to pass any data type [OK]
Hint: Always use void* parameter to pass data to tasks [OK]
Common Mistakes:
  • Using int instead of void* parameter
  • Using void without pointer
  • Not casting void* to correct type inside task
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