After spending a bit of time on using Tasks, I’ve experienced a problem on using sprintf() in <stdio.h> provided by Microchip MPLAB C30.
Here are the symptoms:
1) When I used sprintf() in Task to print a string of characters, there are no problems.
2) When I used sprintf() in Task to print an integer or a floating point number, the function fails to work and seems to generate a reset on my chip.
3) When I used sprintf() in Coroutine, both characters and numbers work fine.
I wonder if anyone experienced the same problem at all? Is the problem caused by Task? or by sprintf()? or others?
Most likely a stack issue. The biggest (and maybe only) disadvantage of GCC is that its standard library functions are pretty huge. When you print just a string it probably replaces the call with a puts(), which is standard for GCC. When you print numeric values it will start consuming an unpleasant amount of stack. Try increasing the stack size of the task that uses printf.