<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash in Kinetis Software Development Kit</title>
    <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503381#M4887</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Manfred:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for your effort&amp;nbsp; to locate the root cause.&amp;nbsp; By increasing PBUF_POOL_BUFSIZE to contain the whole Ethernet frame is the fix.&amp;nbsp; This issue is present for KSDK 2.0 Rel1(or older). Not for current. For K64, Rel1 is the latest.&lt;/P&gt;&lt;P&gt;If you need good performance and not waste much memory, I think you can keep the PBUF_POOL_BUFSIZE as original, and&amp;nbsp; discard the long-size incoming packet in ethernet driver (will lose long size packet), it depends on your requirement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Daniel&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 12 Jul 2016 13:47:44 GMT</pubDate>
    <dc:creator>danielchen</dc:creator>
    <dc:date>2016-07-12T13:47:44Z</dc:date>
    <item>
      <title>FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503377#M4883</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear all,&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm using the K64 Tower board and downloaded the SDK2.0.0. Then I started to run the tcpipecho server demo which uses FreeRTOS and LwIP in KDS. It runs fine for some time (something like a few minutes). I can connect/disconnect to it and echo some text. But after that it crashes (HardFault) (most of the time LwIP's mem&lt;STRONG&gt;p&lt;/STRONG&gt;_alloc() cannot allocate memory).&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried a lot to figure out what could cause it. Enabled memory check, increased pbuf size and chain, tried C malloc, increased FreeRTOS heap moved it to SRAM-H .... But nothing helps.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then I started to download the SDK again but for IAR and downloaded the IAR demo version. Still the same, after a some time it crashes.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Does someone has the same experience and knows what the problem is?&lt;/P&gt;&lt;P&gt;- Is there a very stable working example for FreeRTOS in combination with LwIP (preferable a K64 client demo)?&lt;/P&gt;&lt;P&gt;- Does someone has tips to let it work?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 26 May 2016 12:16:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503377#M4883</guid>
      <dc:creator>wilcovm</dc:creator>
      <dc:date>2016-05-26T12:16:08Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503378#M4884</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Wilco:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have tried this demo with TWR- K64 for about 20 minutes, and not found this issue. Did you modify the source code?&lt;/P&gt;&lt;P&gt;SDK_2.0_TWR-K64F120M\boards\twrk64f120m\demo_apps\lwip\lwip_tcpecho\freertos\iar&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Could you&amp;nbsp; help me how to reproduce your issue in my side?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Daniel&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 Jun 2016 14:46:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503378#M4884</guid>
      <dc:creator>danielchen</dc:creator>
      <dc:date>2016-06-01T14:46:55Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503379#M4885</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Daniel,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for your reaction!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Yes, that's the demo I use. I didn't modify the code (except for a different IP address). But we have a heavily used network at work. E.g we have one device on the network (network with more than 50 devices) which sends quite often a broadcast with one package length of 682 bytes or more (seen with Wireshark). I'm not sending anything to the demo myself, I only connect to it. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;At my home (very small hardly used network) I don't have this problem of the crash. There it works fine for more than 30 min.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That's making me scared because the final device should work very reliable on every network. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Maybe you can reproduce by sending a broadcast which has a package with a very large package length (say &amp;gt;682 bytes).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Wilco&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 Jun 2016 16:01:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503379#M4885</guid>
      <dc:creator>wilcovm</dc:creator>
      <dc:date>2016-06-01T16:01:27Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503380#M4886</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Daniel and Wilco,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have the same problem. I use K64 with KSDK2.0 + LWIP and IAR Workbench.&lt;/P&gt;&lt;P&gt;I use the internal buffer in "pbuf.c" with pbuf_alloc().&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The size of PBUF is set to 256, so I get the error quick.&lt;/P&gt;&lt;P&gt;#define PBUF_POOL_BUFSIZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 256&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I investigated the problem.&lt;/P&gt;&lt;P&gt;--&amp;gt; the memory corruption happens every time when a incomming packet is greater than PBUF_POOL_BUFSIZE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The bug is in KSDK_2.0\middleware\lwip_1.4.1\port\ethernetif.c.&lt;/P&gt;&lt;P&gt;In function ethernetif_Input() the buffer is allocated from PBUF_POOL with length. Every time the length is greater than one single buffer size, you get back a chain of buffers. --&amp;gt; this memory area is not &lt;A href="http://dict.leo.org/ende/index_en.html#/search=continuous&amp;amp;searchLoc=0&amp;amp;resultOrder=basic&amp;amp;multiwordShowSingle=on&amp;amp;pos=0"&gt;continuous&lt;/A&gt;!!!!&lt;/P&gt;&lt;P&gt;Then ENET_ReadFrame() is called with the first buffer and the full length..... there happens the shit.&lt;/P&gt;&lt;P&gt;--&amp;gt; data is copied across the buffer boundary. --&amp;gt; you know what that means....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can someone please have a look on this things... and confirm, that I'm right.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For a quick workaround I changed the pool size to maximum incomming packet size. So the allocated buffer memory is always continous.&lt;/P&gt;&lt;P&gt;#define PBUF_POOL_BUFSIZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1518U /*=ENET_FRAME_MAX_FRAMELEN*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This works. But much memory is wasted and it ist slow.&lt;/P&gt;&lt;P&gt;The function ethernetif_Input() should be reviewed and work with chained buffers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;Manfred&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 Jul 2016 11:54:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503380#M4886</guid>
      <dc:creator>manfredschnell</dc:creator>
      <dc:date>2016-07-07T11:54:29Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503381#M4887</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Manfred:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for your effort&amp;nbsp; to locate the root cause.&amp;nbsp; By increasing PBUF_POOL_BUFSIZE to contain the whole Ethernet frame is the fix.&amp;nbsp; This issue is present for KSDK 2.0 Rel1(or older). Not for current. For K64, Rel1 is the latest.&lt;/P&gt;&lt;P&gt;If you need good performance and not waste much memory, I think you can keep the PBUF_POOL_BUFSIZE as original, and&amp;nbsp; discard the long-size incoming packet in ethernet driver (will lose long size packet), it depends on your requirement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Daniel&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Jul 2016 13:47:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503381#M4887</guid>
      <dc:creator>danielchen</dc:creator>
      <dc:date>2016-07-12T13:47:44Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503382#M4888</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Daniel,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thank you for confirming the fix.&lt;/P&gt;&lt;P&gt;It's not an option to lose long packets.&lt;/P&gt;&lt;P&gt;In the meantime I revised the ethernetif_Input() function.&lt;/P&gt;&lt;P&gt;Now it works with chained buffers, when necessary. And updates the LINK_STATS of lwip.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards.&lt;/P&gt;&lt;P&gt;Manfred&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Jul 2016 14:18:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503382#M4888</guid>
      <dc:creator>manfredschnell</dc:creator>
      <dc:date>2016-07-12T14:18:38Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503383#M4889</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have the exact same problem. I'm setup to receive udp broadcast messages and some of the messages are to large causing this same memory issue. I temporarily fixed it increasing the &lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;PBUF_POOL_BUFSIZE but I am curious what changes you made to &lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;ethernetif_Input() Manfred, you ok to share your changes? I'm also curious when we will see the fix for download available for K64 Daniel?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 23 Jul 2016 11:18:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503383#M4889</guid>
      <dc:creator>wesleyhunter</dc:creator>
      <dc:date>2016-07-23T11:18:39Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503384#M4890</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Wesley,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think I can share the revised ethernetif_input(). But I do this without any warranty.&lt;/P&gt;&lt;P&gt;This job should be done by NXP... &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Take care...&amp;nbsp; this function sometime needs a big local buffer with size&amp;nbsp; ENET_FRAME_MAX_FRAMELEN !!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;Manfred&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14695238707888691 jive_text_macro" data-renderedposition="268_8_899_2160" jivemacro_uid="_14695238707888691"&gt;&lt;P&gt;void ethernetif_input(enet_handle_t *handle, void *param)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; struct eth_hdr *ethhdr;
&amp;nbsp;&amp;nbsp;&amp;nbsp; struct pbuf *packetTempBuffer;
&amp;nbsp;&amp;nbsp;&amp;nbsp; status_t status;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t length = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; struct netif *netif = param;
&amp;nbsp;&amp;nbsp;&amp;nbsp; static enet_data_error_stats_t eErrStatic; // to get the error statically
&amp;nbsp;&amp;nbsp;&amp;nbsp; // by MS enet_data_error_stats_t eErrStatic;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t localLen;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t workedBytes;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t lengthToCopy;
&amp;nbsp;&amp;nbsp;&amp;nbsp; static uint16_t type;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check input parameter */
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (netif == NULL)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LWIP_ASSERT("Input param is NULL", 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Should not reach this statement if error occurs */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Read all data from ring buffer and send to uper layer */
&amp;nbsp;&amp;nbsp;&amp;nbsp; do
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Get the Frame size */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = ENET_GetRxFrameSize(handle, &amp;amp;length);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Call ENET_ReadFrame when there is a received frame. */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (length != 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t *receivedDataBuffer;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct pbuf *packetBuffer;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packetBuffer = pbuf_alloc(PBUF_RAW, length, PBUF_POOL);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Received valid frame. Deliver the rx buffer with the size equal to length. */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((packetBuffer == NULL) || (packetBuffer-&amp;gt;payload == NULL))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pbuf_free(packetBuffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packetBuffer = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LWIP_ASSERT("Fail to allocate new memory space", 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINK_STATS_INC(link.memerr);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Should not reach this statement if error occurs */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( length &amp;lt;= PBUF_POOL_BUFSIZE )&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // target buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; receivedDataBuffer = packetBuffer-&amp;gt;payload;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packetBuffer-&amp;gt;len = (u16_t)length;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // read direct to one buffer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENET_ReadFrame(ENET, handle, receivedDataBuffer, packetBuffer-&amp;gt;len);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINK_STATS_INC(link.recv);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // read to one temp buffer and copy then to allocated memory
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char ucBuffer[ENET_FRAME_MAX_FRAMELEN];

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( length &amp;gt; ENET_FRAME_MAX_FRAMELEN )&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pbuf_free(packetBuffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packetBuffer = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LWIP_ASSERT("Fail length &amp;gt; ENET_FRAME_MAX_FRAMELEN", 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINK_STATS_INC(link.lenerr);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Should not reach this statement if error occurs */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // read local
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENET_ReadFrame(ENET, handle, ucBuffer, length);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINK_STATS_INC(link.recv);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // take the total length
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; localLen = length; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; workedBytes = 0;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packetTempBuffer = packetBuffer;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ( (localLen) &amp;amp;&amp;amp; (packetTempBuffer != NULL) )&amp;nbsp; {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lengthToCopy = localLen;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( lengthToCopy &amp;gt; packetTempBuffer-&amp;gt;len ) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lengthToCopy = packetTempBuffer-&amp;gt;len;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // copy one part
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memcpy(packetTempBuffer-&amp;gt;payload, &amp;amp;ucBuffer[workedBytes], lengthToCopy);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // next buffer in chain
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packetTempBuffer = packetTempBuffer-&amp;gt;next;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; localLen -= lengthToCopy;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; workedBytes += lengthToCopy; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* points to packet payload, which starts with an Ethernet header */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ethhdr = packetBuffer-&amp;gt;payload;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type = htons(ethhdr-&amp;gt;type);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (type)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* IP or ARP packet? */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ETHTYPE_IP:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ETHTYPE_ARP:
#if PPPOE_SUPPORT
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* PPPoE packet? */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ETHTYPE_PPPOEDISC:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ETHTYPE_PPPOE:
#endif /* PPPOE_SUPPORT */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* full packet send to tcpip_thread to process */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (netif-&amp;gt;input(packetBuffer, netif) != ERR_OK)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pbuf_free(packetBuffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packetBuffer = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pbuf_free(packetBuffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; packetBuffer = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINK_STATS_INC(link.drop);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Update the received buffer when error happened. */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (status != kStatus_Success) &amp;amp;&amp;amp; (status != kStatus_ENET_RxFrameEmpty) )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Get the error information of the received g_frame. */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENET_GetRxErrBeforeReadFrame(handle, &amp;amp;eErrStatic);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* update the receive buffer. */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENET_ReadFrame(ENET, handle, NULL, 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINK_STATS_INC(link.err);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; } while (kStatus_ENET_RxFrameEmpty != status);
}&lt;/P&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Jul 2016 09:09:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503384#M4890</guid>
      <dc:creator>manfredschnell</dc:creator>
      <dc:date>2016-07-26T09:09:01Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503385#M4891</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi:&lt;/P&gt;&lt;P&gt;Yes, I think this API should be revised again.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 11 Oct 2016 11:12:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503385#M4891</guid>
      <dc:creator>daweiyou</dc:creator>
      <dc:date>2016-10-11T11:12:23Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503386#M4892</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;this solution requires 1.5K of stack memory. as suggested&amp;nbsp;in &lt;A _jive_internal="true" href="https://community.nxp.com/message/844158"&gt;my report of the same issue&lt;/A&gt;, the easiest thing to do is to allocate a PBUF_RAM buffer if the packet doesn't fit into the allocated PBUF_POOL&amp;nbsp;buffer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;increasing PBUF_POOL_BUFSIZE to 1.5K is actually a pretty inefficient solution and will waste a lot of memory -&amp;nbsp;lwip is written to deal with pbuf chains, and&amp;nbsp;this allows for more efficient memory management.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;the real solution is to make&amp;nbsp;ENET_ReadFrame do partial reads.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Oct 2016 06:45:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503386#M4892</guid>
      <dc:creator>rojer</dc:creator>
      <dc:date>2016-10-25T06:45:34Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503387#M4893</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Deomid,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;my solution needs 1.5K stack, that's true. I prefer a static allocated buffer, instead of a dynamic allocated memory from heap. That may lead to memory defragmentation dependent on network load.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;increasing PBUF_POOL_BUFSIZE to 1.5K&amp;nbsp; --&amp;gt; is just a cheap workaround with many disatvantages.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;"the real solution is to make&amp;nbsp;ENET_ReadFrame do partial reads." --&amp;gt; yes ENET_ReadFrame should read direct to chained buffers. --&amp;gt;&amp;nbsp;this API should be revised again by NXP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm curious, when we will get a reworked KSDK2.x.... There is enough to improve for NXP.....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;Manfred&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Oct 2016 07:14:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503387#M4893</guid>
      <dc:creator>manfredschnell</dc:creator>
      <dc:date>2016-10-25T07:14:36Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503388#M4894</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;ENET_ReadFrame should read direct to chained buffers.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;ENET_ReadFrame is not lwip-specific and making it aware of pbuf chains would be wrong. however, there is a simpler solution: right now ENET_ReadFrame&amp;nbsp;it assumes that length is enough to accommodate entire frame. instead, it just needs to read as much of the frame as the passed length parameter allows and leave the rest in the buffer(s). ethernetif_input should then&amp;nbsp;loop over the allocate pbuf chain and call&amp;nbsp;&lt;SPAN&gt;ENET_ReadFrame repeatedly until the frame is fully copied.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Oct 2016 08:41:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503388#M4894</guid>
      <dc:creator>rojer</dc:creator>
      <dc:date>2016-10-25T08:41:25Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503389#M4895</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;We're still observing crashes of the vanilla lwip_freertos_tcpecho from LPCXpresso 8.2.2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;We traced one problem down to wrong configuration of the DMA buffers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But there's still a reproducible crash when we execute&amp;nbsp;&lt;STRONG&gt;sudo nmap -sn 192.168.1.0/24&lt;/STRONG&gt; on the subnet containing the embedded device (you may have to adapt the network address to your setup).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm interested to hear from anybody who tried any of the fixes suggested in this thread: &amp;nbsp;Is your example robust against this nmap command?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;--Gerhard Wesp&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;KISS Technologies&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Sep 2017 14:25:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503389#M4895</guid>
      <dc:creator>gewesp</dc:creator>
      <dc:date>2017-09-12T14:25:39Z</dc:date>
    </item>
    <item>
      <title>Re: FreeRTOS LwIP SDK v2.0.0 tpcipecho demo crash</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503390#M4896</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Note that PBUF_POOL_BUFSIZE depends on &lt;SPAN style="font-family: Consolas; font-size: small;"&gt;TCP_MSS.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Increasing TCP Maximum segment should be considered rather than just increasing PBUF_POOL_BUFSIZE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From opt.h:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/**&lt;/P&gt;&lt;P&gt;* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is&lt;/P&gt;&lt;P&gt;* designed to accommodate single full size TCP frame in one pbuf, including&lt;/P&gt;&lt;P&gt;* TCP_MSS, IP header, and link header.&lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #808080; font-size: small; font-family: Consolas;"&gt;#if&lt;/SPAN&gt;&lt;SPAN style="font-size: small; font-family: Consolas;"&gt; !&lt;/SPAN&gt;&lt;SPAN style="color: #808080; font-size: small; font-family: Consolas;"&gt;defined&lt;/SPAN&gt;&lt;SPAN style="font-size: small; font-family: Consolas;"&gt; PBUF_POOL_BUFSIZE || &lt;/SPAN&gt;&lt;SPAN style="color: #808080; font-size: small; font-family: Consolas;"&gt;defined&lt;/SPAN&gt;&lt;SPAN style="font-size: small; font-family: Consolas;"&gt; __DOXYGEN__&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #808080; font-size: small; font-family: Consolas;"&gt;#define&lt;/SPAN&gt;&lt;SPAN style="font-size: small; font-family: Consolas;"&gt; PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Apr 2018 15:42:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/FreeRTOS-LwIP-SDK-v2-0-0-tpcipecho-demo-crash/m-p/503390#M4896</guid>
      <dc:creator>paulvanoppen</dc:creator>
      <dc:date>2018-04-16T15:42:12Z</dc:date>
    </item>
  </channel>
</rss>

