Task function macro for timer task
Why isn’t portTASK_FUNCTION been used for the timerTask? The macro is used for the idleTask.
Task function macro for timer task
Those macros are not really used in practice. It seemed like a good idea at the time, but after the (probably hundreds) of combinations of compiler and architecture ports we found they were only actually needed on one occasions – and that was for something somewhat obscure.
Regards.
Task function macro for timer task
I used the macro to implement the IAR extension keyword __task.
IAR help:
This keyword allows functions to relax the rules for preserving registers. Typically, the keyword is used on the start function for a task in an RTOS.
By default, functions save the contents of used preserved registers on the stack upon entry, and restore them at exit. Functions that are declared __task do not save all registers, and therefore require less stack space.
Because a function declared __task can corrupt registers that are needed by the calling function, you should only use __task on functions that do not return or call such a function from assembler code.
The function main can be declared __task, unless it is explicitly called from the application. In real-time applications with more than one task, the root function of each task can be declared __task.
For the implementation I add a define in projdefs.h and portableIARMSP430Xportmacro.h.
projdefs.h:
#define TASKEXTENSIONKEYWORD __task
/*
* Defines the prototype to which task functions must conform. Defined in this
* file to ensure the type is known before portable.h is included.
*/
typedef TASKEXTENSIONKEYWORD void (*TaskFunction_t)( void * );
portmacro.h:
/* Task function macros as described on the FreeRTOS.org WEB site. */
#define portTASKFUNCTIONPROTO( vFunction, pvParameters ) TASKEXTENSIONKEYWORD void vFunction( void *pvParameters )
#define portTASKFUNCTION( vFunction, pvParameters ) TASKEXTENSION_KEYWORD void vFunction( void *pvParameters )