Many errors and warnings after building FreeRTOS-Plus-TCP-Multi

hitech14 wrote on Thursday, June 07, 2018:

Hi all,

After building de files of FreeRTOS-Plus-TCP-Multi with GCC Arm toolchain, I get many errors and warnings.
For example: unknown typename xZeroCopyBufferDescriptor, ipconfigMAX_UDP_DATA_LENGTH and
FreeRTOS_GetZeroCopyBuffer()??

Where can I find these definitions?

Thanks for help in advance,

Max

heinbali01 wrote on Thursday, June 07, 2018:

The items that you mention are part of an old demo module Test_Code\Sockets_Test.c. I’m sorry but it has not been updated for a long time.

If I am not mistaken, xZeroCopyBufferDescriptor_t should be:

    typedef NetworkBufferDescriptor_t *xZeroCopyBufferDescriptor_t;

Note that nowadays, the initial ‘x’ would not be used for a typedef anymore, so it would become ZeroCopyBufferDescriptor_t.

ipconfigMAX_UDP_DATA_LENGTH indicates the length of the UDP packets that are transmitted.

The function FreeRTOS_GetZeroCopyBuffer() was a wrapper, it would call the function pxGetNetworkBufferWithDescriptor() .

I think it looked lke this:

BaseType_t FreeRTOS_GetZeroCopyBuffer( xZeroCopyBufferDescriptor_t *pBuffer, size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks )
{
BaseType_t xResult;

	*pBuffer = pxGetNetworkBufferWithDescriptor( xRequestedSizeBytes, xBlockTimeTicks );
	if( *pBuffer != NULL )
	{
		xResult = pdPASS;
	}
	else
	{
		xResult = pdFAIL;
	}
	return xResult;
}

Zero-copy for UDP:

For UDP sockets, zero-copy means that the user doesn’t pass character buffers, but Network Buffers, which travel from the Network Interface all the way to the application ( FreeRTOS_recvfrom() ), without ever getting ( mem- ) copied.

The same for FreeRTOS_sendto() : the user fills and sends a Network Bufferm which won’t get copied neither. If you have a zero-copy driver, the memory of the Network Buffer will be passed directly to DMA.

The actual library sources files of FreeRTOS+TCP are these nine:

FreeRTOS_ARP.c
FreeRTOS_DHCP.c
FreeRTOS_DNS.c
FreeRTOS_IP.c
FreeRTOS_Sockets.c
FreeRTOS_Stream_Buffer.c
FreeRTOS_TCP_IP.c
FreeRTOS_TCP_WIN.c
FreeRTOS_UDP_IP.c

I hope that they compile without too many problems. Yes we also tested it with the GCC Arm toolchain.

Max, are you sure you need the /multi version of FreeRTOS+TCP? For which platform, if I may ask?

The /multi version has support for multiple Network Interfaces, and also multiple IP-addresses. it also implements IPv6, but that part is still under construction.