HI,
While sending or receiving packets at a very fast rate say 1ms, the arp GRATUITOUS which triggers when an ARP timer expires
case eARPTimerEvent:
/* The ARP timer has expired, process the ARP cache. */
#if (arpGRATUITOUS_ARP_PERIOD == pdTRUE)
vARPAgeCache();
SafeRTOSNet_debug_printf( ( "prvIPTask running: Event Type = ARP timer has expired \r\n" ) );
#endif
break;
caused the stack to crash, i.e the send/receive was not able
to get network buffers
i.e. you will eventually hit in bufferAllocaion_1.c
if( xInvalid == pdTRUE )
{
/* _RB_ Can printf() be called from an interrupt? (comment
* above says this can be called from an interrupt too) */
configASSERT(xInvalid);
/* _HT_ The function shall not be called from an ISR. Comment
* was indeed misleading. Hopefully clear now?
* So the printf()is OK here. */
SafeRTOSNet_debug_printf( ( "pxGetNetworkBufferWithDescriptor: INVALID BUFFER: %p (valid %lu)\n",
pxReturn, bIsValidNetworkDescriptor( pxReturn ) ) );
pxReturn = NULL;
}
I think this is due to task starvation of the IP_STACK, where a small glitch due to ARP has occurred. Probably having static Net configs than ARP-based caching will be the best.
Is this a known issue
Regards
Anand