IAR EWARM version 5 stack alignment

jorick23 wrote on Tuesday, September 29, 2009:

I’ve been having an issue with IAR’s EWARM version 5 where functions that take 8 byte arguments (double, long long) would have the argument misaligned on the stack.  This was most noticeable in the printf and sprintf functions where a buffer overflow would occur as the misaligned double would try to format a number of over 200 digits.

After numerous tech support emails to IAR and an accidental discovery in one of their manuals, I discovered that the version 5 compiler requires the stack pointer to be 8 byte aligned when a function call is made.

Now as far as I know, FreeRTOS may already align the task stacks to 8 bytes.  But I made modifications to the TCB where the registers would be stored there instead of on the task stack when a task switch was made.  Apparently these modifications caused the stack to misalign and wreak havoc when I tried to upgrade to version 5.

I’ve noticed occasional emails to this forum describing a similar problem, so this post may be a solution.

rtel wrote on Tuesday, September 29, 2009:

I think this is a duplicate post?  In any case I replied to the other copy.