PIC32MX lwIP + FreeRTOS port again
I received and send frames now which is a success. There is a problem though in the Tctcpip thread. It appears to be FreeRTOS related so I ask here. Quite complex to explain the problem byt here we go.
In the tcpip thread the code waits for a frame. This is done with
sys_mbox_fetch(mbox, (void *)&msg);
which is defined in the sys_arch.c When called I get an exception.
I have checked that the mbox has been initialized and can trace the fault to a list iteration in vListInsert (called in vTaskPlaceOnEventList)
for( pxIterator = ( xListItem * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext )
{
/* There is nothing to do here, we are just iterating to the
wanted insertion position. */
}
As I can see the list pointers are messed up as this point giving the exception. I have not been able to figure out why yet.
Call stack is
- tcpip_thread
- sys_mbox_fetch
- sys_arch_mbox_fetch
- xQueueGenericReceive
- vTaskPlaceOnEventList
Any hints appreciated.
Cheers
/Ake
PIC32MX lwIP + FreeRTOS port again
Most likely cause of this is stack overflow – the lwIP threads can use quite a bit of stack, especially when using standard GCC C library functions such as sprintf() [you can use cut down versions that are more stack friendly on embedded systems].
Check the task that implements your lwIP functionality AND any task that is created using sys_thread_new() within sys_arch.c. Put a break point in sys_thread_new() to ensure you catch each time it is called.
Regards.
PIC32MX lwIP + FreeRTOS port again
Hi Richard,
you are right of course.
Thanks a lot.
/Ake