Page 1 of 1

SB-21: Salvo: Task Problems with AVR-GCC

PostPosted: Fri Dec 19, 2003 2:43 am
by Salvo Tech Support
Applies To

All Salvo for Atmel AVR and MegaAVR users who are using the AVR-GCC compiler.

Description of Problem

The runtime behavior of a task is not what is expected. For example, the <flag> variable in this task will not be set to the proper value:

void TaskCount( void )
static unsigned int flag;

for (;;)
if ((counter % 2) == 0)
flag = 0;

The problem is due to a register allocation / filling optimization that the AVR-GCC compiler is applying to the task. This optimization is incompatible with Salvo's task structure due to the fact that Salvo tasks can be (re-)entered after every context switch.

Suggested Workaround

Replace OS_Yield() in salvoincportgccavr.h with:

#define OS_Yield(label) do { OSCtxSw(); __asm__ __volatile__(" nop"::); } while (0)

Fixed In


Salvo Technical Support
Please request all tech support through the Forums.