FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [August 2015 Threads]
I'm trying to chase down an out of heap memory problem when a TCP socket is created. heap2 malloc fails requesting 5872 bytes. This looks like it's based on creating stream buffers via...
ifndef ipconfigTCPRXBUF_LEN
#define ipconfigTCP_RX_BUF_LEN ( 4 * ipconfigTCP_MSS ) /* defaults to 5840 bytes */
endif
/* Define the size of Tx stream buffer for TCP sockets */
ifndef ipconfigTCPTXBUF_LEN
define ipconfigTCPTXBUFLEN ( 4 * ipconfigTCPMSS ) /* defaults to 5840 bytes */
This seems ot add up to >10K per tcp socket. Can I reduce TCP_MSS to something smaller? Can it be less than an ethernet Mtu?
Thanks
Larry
Hi Larry,
About posting: you can include literal code if you put it between two lines which only contain 5 tildas ~~~~~
, as here:
~~~~~
int function( void )
{
/* This is a comment */
return 0;
}
~~~~~
I'm glad you traced down the problem.
This seems ot add up to >10K per tcp socket. Can I reduce
TCP_MSS to something smaller? Can it be less than an ethernet Mtu?
This is a TCP packet:
1) Ethernet header = 14 bytes
2) IP-header = 20 bytes
3) TCP-header = 20 bytes
4) TCP contents/payload <= MSS
MTU (Maximum Transmission Unit) equals MSS + 40.
The 'Ethernet header' of 14 bytes is not included in the MTU.
I would recommend bringing down the MTU for testing, e.g.:
#define ipconfigNETWORK_MTU 800
The value of MSS will automatically adapt:
#define ipconfigTCP_MSS ( ipconfigNETWORK_MTU - ipSIZE_OF_IP_HEADER - ipSIZE_OF_TCP_HEADER )
which is 1000 - 40 = 960 bytes.
This post might also be interesting for you:
https://sourceforge.net/p/freertos/discussion/382005/thread/a9c8fc93/?limit=25#5a90
Regards,
Hein
Are you using BufferAllocation2.c? If so, please note you need to use heap4.c, not heap2.c:
http://www.freertos.org/FreeRTOS-Plus/FreeRTOSPlusTCP/EmbeddedEthernetBufferManagement.html
Regards.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.