Stack Overflow / Underflow with serial com

sigmaa wrote on Saturday, November 19, 2011:

Hi,

I use FreeRTOS 7.0.2 on the PIC18F4685.

I create a simple task that get data from the serial port. If I send data slowly on the port of the PIC, it work well, but if I send a big amount of data, I have stackoverflow/underflow.

If I put usStackDepth of 200, the problem disapear, but why ?

This is the code of my task :

static portTASK_FUNCTION( vComRxTask, pvParameters )
{
signed char cByteRxed;

/* Just to stop compiler warnings. */
( void ) pvParameters;

for( ;; )
{
/* Block on the queue that contains received bytes until a byte is
available. */
if( xSerialGetChar( xPort, &cByteRxed, comRX_BLOCK_TIME ) )
{
if( cByteRxed == ‘1’ )
{
vParTestSetLED( 2, pdTRUE );
}
else
{
vParTestSetLED( 2, pdFALSE );
}
}
}
}

Thanks

rtel wrote on Monday, November 21, 2011:

If I put usStackDepth of 200, the problem disapear, but why ?

Well you haven’t said what you changed it from, but I would guess because when you have it lower than that you are overflowing the stack?

Regards.

sigmaa wrote on Thursday, November 24, 2011:

Sorry I change it at the creation of the task :

xTaskCreate( vComRxTask, ( signed char * ) “COMRx”, 200, NULL, uxPriority, ( xTaskHandle * ) NULL );

Well you haven’t said what you changed it from, but I would guess because when you have it lower than that you are overflowing the stack?

Yes but why is there an overflow. There is a buffer for the input data of the serial link. If too much data is incoming, I would understand that the OS don’t take all the data, but why an overflow appear ?

With 200, it work, but what is the genrel way to estimate the value of this stack ?

Thanks.

sigmaa wrote on Friday, December 23, 2011:

Please ?