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
if( xSerialGetChar( xPort, &cByteRxed, comRX_BLOCK_TIME ) )
if( cByteRxed == '1' )
vParTestSetLED( 2, pdTRUE );
vParTestSetLED( 2, pdFALSE );
“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?
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 ?