Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem



Posted by Pietro on October 11, 2007
what are the differences between a task definited (and declared)

static void vPCtask( void *pvParameters ) {...}

and a task definited (and declared)

static portTASK_FUNCTION( vPCtask, pvParameters ) {...} ?

What is the more correct definition (declaration)?

RE: task

Posted by Dave on October 11, 2007
Some ports (WizC I think) want extra qualifiers on task functions. The macros let you do this. Also, you might want to have your task functions declared as "no return" so they don't waste stack space saving registers on entry that are never going to get popped off the stack again. In either of these cases you can use the macro to perform the extra qualification. In all other cases there is no difference between the two methods.

RE: task

Posted by Darrik Spaude on October 11, 2007
My guess is that this is a convention used to generate one set of source code that can deal with different compilers. If either method you gave as an example works for your compiler then there is no difference in your situation. You can declare the functions however you would like, but if you later port your code to another system/compiler then you might need to modify the declaration (but it isn't very likely you would need to do so). To avoid having to do that then you could declare them with the portTASK_FUNCTION().

Also, it is possible that the macro declaration could in the future add some other parameters specific to the port and in that case you would have to change all of your other non-portTASK_FUNCTION() declarations to match.

I chose to not use portTASK_FUNCTION() because the C parser of my IDE can't correctly parse such declarations.

[ Back to the top ]    [ About FreeRTOS ]    [ Privacy ]    [ Sitemap ]    [ ]

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

Version 10.1.0 of the FreeRTOS kernel is available for immediate download. MIT licensed.

View a recording of the "OTA Update Security and Reliability" webinar, presented by TI and AWS.


FreeRTOS and other embedded software careers at AWS.

FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Espressif ESP32

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers


STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS

Xilinx Microblaze and Zynq partner