anonymous wrote on Tuesday, April 27, 2010:
GCC documentation (http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html) states in 6.29 Declaring Attributes of Functions
"naked
Use this attribute on the ARM, AVR, IP2K, RX and SPU ports to indicate that the specified function does not need prologue/epilogue sequences generated by the compiler. It is up to the programmer to provide these sequences. The only statements that can be safely included in naked functions are asm statements that do not have operands. All other statements, including declarations of local variables, if statements, and so forth, should be avoided. Naked functions should be used to implement the body of an assembly function, while allowing the compiler to construct the requisite function declaration for the assembler."
In the source of FreeRTOS for AVR I have seen the following:
void vPortYield( void ) attribute ( ( naked ) );
void vPortYield( void ) {
portSAVE_CONTEXT();
vTaskSwitchContext();
portRESTORE_CONTEXT();
asm volatile ( "ret" ); }
portSAVE_CONTEXT() and portRESTORE_CONTEXT() are macroses with asm but vTaskSwitchContext is a function
My question is: Is the port for AVR of FreeRTOS is correct, or did I miss something?