Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT Training



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 ]    [ Sitemap ]    [ ]

Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.

Latest News:

FreeRTOS V9.0.0 is now available for download.

Free TCP/IP and file system demos for the RTOS

Sponsored Links

⇓ Now With No Code Size Limit! ⇓
⇑ Free Download Without Registering ⇑

FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Renesas Electronics Gold Alliance RTOS Partner.jpg

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Atmel RTOS partner supporting ARM Cortex-M3 and AVR32 microcontrollers

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

Xilinx Microblaze and Zynq partner

Silicon Labs low power RTOS partner

Altera RTOS partner for Nios II and Cortex-A9 SoC

Freescale Alliance RTOS Member supporting ARM and ColdFire microcontrollers

Infineon ARM Cortex-M microcontrollers

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

Cypress RTOS partner supporting ARM Cortex-M3

Fujitsu RTOS partner supporting ARM Cortex-M3 and FM3

Microsemi (previously Actel) RTOS partner supporting ARM Cortex-M3

Atollic Partner

IAR Partner

Keil ARM Partner

Embedded Artists