printf problem while multitasking

Posted by Scott Nortman on January 4, 2007
I am now trying to use stdio facilities in my application.

I am using the serial.c demo file which implements a basic interrupt driven API. I've implemented a semaphore to control access to the serial functions across multiple tasks.

This works:

static void task1( void *pv )
{

for(;;)
{

vTaskDelay( 100 );

if( xSemaphoreTake( xSerialSemaphore, 10 )
{
printf("task1\r\n");
xSemaphoreGive( xSerialSemaphore );
}
}

static void task2( void *pv )
{
for(;;)
{
vTaskDelay( 200);

if( xSemaphoreTake( xSerialSemaphore, 10 )
{
printf("task2\r\n");
xSemaphoreGive( xSerialSemaphore );
}
}

But this does NOT:


static void task1( void *pv )
{

for(;;)
{

vTaskDelay( 100 );

if( xSemaphoreTake( xSerialSemaphore, 10 )
{
printf("%c\r\n", 0x31); //changed here
xSemaphoreGive( xSerialSemaphore );
}
}

static void task2( void *pv )
{
for(;;)
{
vTaskDelay( 200);

if( xSemaphoreTake( xSerialSemaphore, 10 )
{
printf("task2\r\n");
xSemaphoreGive( xSerialSemaphore );
}
}


Any suggestions / thoughts?

--Scott

RE: printf problem while multitasking

Posted by Nobody/Anonymous on January 4, 2007
printf can take a looooot of stack, especially if using gcc. Can you confirm that this is not just overflowing the stack.

I have also seen implementation where printf was not reentrant. I think this was mplab C18 compiler.

Dave.

RE: printf problem while multitasking

Posted by Scott Nortman on January 4, 2007
Thanks, that appeared to fix the issue... I just increased the stack size.

--Scott