IAR EWARM version 5 stack alignment
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.
IAR EWARM version 5 stack alignment
I think this is a duplicate post? In any case I replied to the other copy.
Regards.