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 )