printf problem while multitasking
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("task1rn");
xSemaphoreGive( xSerialSemaphore );
}
}
static void task2( void *pv )
{
for(;;)
{
vTaskDelay( 200);
if( xSemaphoreTake( xSerialSemaphore, 10 )
{
printf("task2rn");
xSemaphoreGive( xSerialSemaphore );
}
}
But this does NOT:
static void task1( void *pv )
{
for(;;)
{
vTaskDelay( 100 );
if( xSemaphoreTake( xSerialSemaphore, 10 )
{
printf("%crn", 0x31); //changed here
xSemaphoreGive( xSerialSemaphore );
}
}
static void task2( void *pv )
{
for(;;)
{
vTaskDelay( 200);
if( xSemaphoreTake( xSerialSemaphore, 10 )
{
printf("task2rn");
xSemaphoreGive( xSerialSemaphore );
}
}
Any suggestions / thoughts?
--Scott
printf problem while multitasking
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.
printf problem while multitasking
Thanks, that appeared to fix the issue… I just increased the stack size.
--Scott