Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-29 Thread Noam Weissman
Hi,

Regarding my lwipopts ... we use a telnet server and as a result send small 
chunks of data.

Originally MSS was 1500 bytes and that cause the system to be very slow when 
combined with HTTP etc.

The compromise that I made is to set MSS to its default 536 bytes. This slowed 
down HTTP communication but 
In all it is not so significant. In all I find this a general compromise that 
works fine.


BR,
Noam.

-Original Message-
From: lwip-users [mailto:lwip-users-bounces+noam=silrd@nongnu.org] On 
Behalf Of pekez
Sent: Tuesday, November 29, 2016 1:29 PM
To: Mailing list for lwIP users
Subject: Re: [lwip-users] lwIP with FreeRTOS memory problem

All right people, but since my main goal is to know the exact amount of memory 
the lwIP uses, could I just find that out without setting MEMP_MEM_MALLOC to 1, 
since it seems that it requires some changes in the kernel itself, as Richard 
and Simon explained. I am still not daring to make such changes since I am not 
really experienced, and especially if I can avoid that (at least for now).

So, I have returned MEMP_MEM_MALLOC to 0, and generated with Xilinx SDK a .map 
file (it's in attachments). Can we say that lwIP for sure won't take more 
memory then what we can see in that file, ram_heap plus sum of everything that 
makes memp_memory (which includes entire pbuf_pool
(PBUF_POOL_BUFSIZE*PBUF_POOL_SIZE) as well)? Is there anyway I can verify that 
with mentioned iperf application, for example, to add some enormous array which 
will fill the rest of RAM, and try to write to it, and see whether that will 
make some influence on lwIP?

Noam, I had a look at your lwipopts.h, and I must say that your suggestions 
have helped when it comes to lwIP performance, especially the MEMP_NUM_PBUF 
define.

The Best,
Nenad


___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users


Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-29 Thread pekez
All right people, but since my main goal is to know the exact amount of 
memory the lwIP uses, could I just find that out without setting 
MEMP_MEM_MALLOC to 1, since it seems that it requires some changes in 
the kernel itself, as Richard and Simon explained. I am still not daring 
to make such changes since I am not really experienced, and especially 
if I can avoid that (at least for now).


So, I have returned MEMP_MEM_MALLOC to 0, and generated with Xilinx SDK 
a .map file (it's in attachments). Can we say that lwIP for sure won't 
take more memory then what we can see in that file, ram_heap plus sum of 
everything that makes memp_memory (which includes entire pbuf_pool 
(PBUF_POOL_BUFSIZE*PBUF_POOL_SIZE) as well)? Is there anyway I can 
verify that with mentioned iperf application, for example, to add some 
enormous array which will fill the rest of RAM, and try to write to it, 
and see whether that will make some influence on lwIP?


Noam, I had a look at your lwipopts.h, and I must say that your 
suggestions have helped when it comes to lwIP performance, especially 
the MEMP_NUM_PBUF define.


The Best,
Nenad

___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-29 Thread Simon Goldschmidt
Noam Weissman wrote:
> As far as I remember communication stopped and maybe it crashed or not this 
> is not the issue.
> The issue is that once I set my defines as suggested this problem was never 
> happened again.

This is totally off topic here. The OP has set MEMP_MEM_MALLOC to 1. In this 
case, all pool
size settings do not matter as everything is allocated from the heap.

> if the system does do not have sufficient buffers but have sufficient PCB's 
> this causes an
> abnormal behavior.

Right. Welcome to the world of resource-constrained systems ;-)


Simon

___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users


Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-29 Thread Noam Weissman
Hi Simon,

Maybe I am wrong, it was 4-5 years ago :-).

As far as I remember communication stopped and maybe it crashed or not this is 
not the issue.
The issue is that once I set my defines as suggested this problem was never 
happened again.

>From what I understand every connection has a new PCB and a pBuf that holds 
>the received data.
if the system does do not have sufficient buffers but have sufficient PCB's 
this causes an abnormal 
behavior. I do not remember if that was a problem with version 1.32 or also in 
1.41  as I upgraded at 
some time.

BR,
Noam.

-Original Message-
From: lwip-users [mailto:lwip-users-bounces+noam=silrd@nongnu.org] On 
Behalf Of Simon Goldschmidt
Sent: Tuesday, November 29, 2016 11:26 AM
To: lwip-users@nongnu.org
Subject: Re: [lwip-users] lwIP with FreeRTOS memory problem

Noam Weissman wrote:
> Several years ago when I started working with LwIP I had a similar problems 
> to the one you raised.
> System was working ok but out of the blue it crashed.
> [..]
> I found the hard way that I am getting MEM_ERR because of the above. I 
> did not had sufficient MEMP_NUM_TCP_SEG defined. After changing the above to 
> what it is now those issues were solved.


How would your system crash because of insufficient tcp segment pool elements?
You could get communication hiccups, but it shouldn't crash!


Simon

___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users
___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users


Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-29 Thread Simon Goldschmidt
Noam Weissman wrote:
> Several years ago when I started working with LwIP I had a similar problems 
> to the one you raised.
> System was working ok but out of the blue it crashed.
> [..]
> I found the hard way that I am getting MEM_ERR because of the above. I did 
> not had sufficient MEMP_NUM_TCP_SEG  
> defined. After changing the above to what it is now those issues were solved.


How would your system crash because of insufficient tcp segment pool elements?
You could get communication hiccups, but it shouldn't crash!


Simon

___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-29 Thread Noam Weissman
Hi,

As a continuation to my earlier mail. I just remembered something so I added it 
here.

Several years ago when I started working with LwIP I had a similar problems to 
the one you raised.
System was working ok but out of the blue it crashed.

I got a project that someone else started and continued from there…

From examining the lwipopts and opts files and doing some debugging I found 
that my options were not properly set.

Especially the following:

//#define MEMP_NUM_TCP_SEG20
#define MEMP_NUM_TCP_SEGTCP_SND_QUEUELEN // 20  // This was previosly 
20 and cause a MEM_ERR it was changed

  // to BE THE SAME SIZE AS 
TCP_SND_QUEUELEN


Originally MEMP_NUM_TCP_SEG was a fixed number and was defined separately from 
TCP_SND_QUEUELEN.

I found the hard way that I am getting MEM_ERR because of the above. I did not 
had sufficient MEMP_NUM_TCP_SEG
defined. After changing the above to what it is now those issues were solved.

Also see the following error (from LwIP init.c):
“
#error "lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big 
as TCP_SND_QUEUELEN. If you know what you
   are doing, define 
LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."

The opts.h file defines MEMP_NUM_TCP_SEG as a fixed value and that causes an 
error that I am probably not the only one
That encountered.


Hope that helped.

BR,
Noam.

From: lwip-users [mailto:lwip-users-bounces+noam=silrd@nongnu.org] On 
Behalf Of Noam Weissman
Sent: Monday, November 28, 2016 1:14 PM
To: Mailing list for lwIP users
Subject: Re: [lwip-users] lwIP with FreeRTOS memory problem

Hi,

I am not sure with my reply as this area is not so documented.

What I can see in your lwipopts that you use tons of memory for the LwIP heap 
but
other defines are way to small

For example:
#define MEMP_NUM_PBUF 16<<< ?
#define MEMP_NUM_UDP_PCB 4
#define MEMP_NUM_TCP_PCB 32
#define MEMP_NUM_TCP_PCB_LISTEN 8

I am using a micro (STM32F4 and F2) with limited memory and never had to use 
more than 20K RAM.

LwIP own opts.h file has macro’s in it and there is a reason for that. Some 
values have relations with other values.

I have attached my own lwipopts.h for your reference. Use it and hopefully it 
will help you.
Do understand that I have set up RAW API and Socket API as well. I use mostly 
RAW API but as
I am using PolarSSL I need the Socket API as well.


Good luck,
Noam.



From: lwip-users [mailto:lwip-users-bounces+noam=silrd@nongnu.org] On 
Behalf Of pekez
Sent: Monday, November 28, 2016 12:18 PM
To: Mailing list for lwIP users
Subject: [lwip-users] lwIP with FreeRTOS memory problem


Hello people,

I've been trying to figure out how lwIP uses memory and it's really important 
to know exact (or maximum) amount of memory that lwIP uses. I am using lwIP 
v1.4.1 with FreeRTOS v8.2.3 on ZYNQ custom board. Right now, I am working with 
application examples provided by Xilinx 
(XAPP1026<https://www.xilinx.com/support/documentation/application_notes/xapp1026.pdf>).
 On ZYNQ board, I am running iperf<https://en.wikipedia.org/wiki/Iperf> server, 
and on PC iperf client.

When both MEMP_MEM_MALLOC and MEM_LIBC_MALLOC are 0 then everything works 
completely expected. However, when I set MEMP_MEM_MALLOC to 1 (according to RAM 
usage article from lwIP wiki<http://lwip.wikia.com/wiki/Lwipopts.h>), so that 
every piece of dynamically allocated memory comes from heap of MEM_SIZE size, 
application always crashes, no matter how big or small MEM_SIZE is (I have a 
lot of RAM, so I tried to put MEM_SIZE to even more then 20 MB!). Application 
crashes because two of FreeRTOS asserts fail, I get these two prints: "Assert 
failed in file queue.c, line 1224" and "Assert failed in file port.c, line 
424". According to call trace (which I provided in attachments), it crashes 
when XEmacPs_IntrHandler (I am using Xilinx layer 2 drivers) tries to allocate 
memory for pbuf.

Is this problem even related to lwIP or maybe to FreeRTOS or Xilinx drivers, 
what do you think? I am also providing the entire lwipopts.h, so that you can 
see whether some other options need to be changed in order to make application 
work with MEMP_MEM_MALLOC set to 1.

Thanks in advance.
___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-29 Thread Simon Goldschmidt
pekez wrote:
> [..]
> However, when I set MEMP_MEM_MALLOC to 1 [..]
> it crashes when XEmacPs_IntrHandler (I am using Xilinx layer 2 drivers) tries 
> to allocate memory for pbuf.

I'm afraid using MEMP_MEM_MALLOC from interrupt does currently not work: it 
will allocate any memory
from the heap, which is protected via getting a semaphore.

Depending on your port, this might work for a while and only crash if the heap 
is actually protected (used)
from non-interrupt context and the interrupt handler tries to access it (as 2nd 
context). This *might*
explain why it works for a while.

Being like that, you can still use MEMP_MEM_MALLOC when changing your ISR to a 
task-based DSR (like
Richard explained), if that's a solution for you...


Simon

___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users


Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-28 Thread Noam Weissman
Hi,

I am not sure with my reply as this area is not so documented.

What I can see in your lwipopts that you use tons of memory for the LwIP heap 
but
other defines are way to small

For example:
#define MEMP_NUM_PBUF 16<<< ?
#define MEMP_NUM_UDP_PCB 4
#define MEMP_NUM_TCP_PCB 32
#define MEMP_NUM_TCP_PCB_LISTEN 8

I am using a micro (STM32F4 and F2) with limited memory and never had to use 
more than 20K RAM.

LwIP own opts.h file has macro’s in it and there is a reason for that. Some 
values have relations with other values.

I have attached my own lwipopts.h for your reference. Use it and hopefully it 
will help you.
Do understand that I have set up RAW API and Socket API as well. I use mostly 
RAW API but as
I am using PolarSSL I need the Socket API as well.


Good luck,
Noam.



From: lwip-users [mailto:lwip-users-bounces+noam=silrd@nongnu.org] On 
Behalf Of pekez
Sent: Monday, November 28, 2016 12:18 PM
To: Mailing list for lwIP users
Subject: [lwip-users] lwIP with FreeRTOS memory problem


Hello people,

I've been trying to figure out how lwIP uses memory and it's really important 
to know exact (or maximum) amount of memory that lwIP uses. I am using lwIP 
v1.4.1 with FreeRTOS v8.2.3 on ZYNQ custom board. Right now, I am working with 
application examples provided by Xilinx 
(XAPP1026).
 On ZYNQ board, I am running iperf server, 
and on PC iperf client.

When both MEMP_MEM_MALLOC and MEM_LIBC_MALLOC are 0 then everything works 
completely expected. However, when I set MEMP_MEM_MALLOC to 1 (according to RAM 
usage article from lwIP wiki), so that 
every piece of dynamically allocated memory comes from heap of MEM_SIZE size, 
application always crashes, no matter how big or small MEM_SIZE is (I have a 
lot of RAM, so I tried to put MEM_SIZE to even more then 20 MB!). Application 
crashes because two of FreeRTOS asserts fail, I get these two prints: "Assert 
failed in file queue.c, line 1224" and "Assert failed in file port.c, line 
424". According to call trace (which I provided in attachments), it crashes 
when XEmacPs_IntrHandler (I am using Xilinx layer 2 drivers) tries to allocate 
memory for pbuf.

Is this problem even related to lwIP or maybe to FreeRTOS or Xilinx drivers, 
what do you think? I am also providing the entire lwipopts.h, so that you can 
see whether some other options need to be changed in order to make application 
work with MEMP_MEM_MALLOC set to 1.

Thanks in advance.
/**
  **
  * @filelwipopts.h
  * @author  MCD Application Team
  * @version V1.1.0
  * @date07-October-2011
  * @brief   lwIP Options Configuration.
  *  This file is based on Utilities\lwip_v1.3.2\src\include\lwip\opt.h 
  *  and contains the lwIP configuration for the STM32F2x7 
demonstration.
  **
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  *  COPYRIGHT 2011 STMicroelectronics
  **
  */

#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__

#include "stdlib.h"

#include "Main.h"



/**
 * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
 * critical regions during buffer allocation, deallocation and memory
 * allocation and deallocation.
 */
#define SYS_LIGHTWEIGHT_PROT1

#define ETHARP_TRUST_IP_MAC 0
#define IP_REASSEMBLY   0
#define IP_FRAG 0
#define ARP_QUEUEING0
#define TCP_LISTEN_BACKLOG  1
#define LWIP_DNS1
#define LWIP_NETIF_STATUS_CALLBACK 1

#define IP_SOF_BROADCAST1
#define IP_SOF_BROADCAST_RECV   1


#define LWIP_IGMP   1

#define SO_REUSE1
#define LWIP_NETIF_HOSTNAME 1

/**
 * NO_SYS==1: Provides VERY minimal functionality. Otherwise,
 * use lwIP facilities.
 */
#define NO_SYS  0

/* -- Memory options -- */
/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
   lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
   byte alignment -> define MEM_ALIGNMENT to 2. */
#define MEM_ALIGNMENT   4

/* MEM_SIZE: the size of the heap memory. If the application will send
   a lot of data that needs to be copied, this should be set high. */
#define MEM_SIZE(14 * 

Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-28 Thread FreeRTOS Info


On 28/11/2016 12:17, Nenad Pekez wrote:

Richard, first of all, thanks for your quick response.

What I forgot to mention is that application doesn't crash at the very
beginning, it actually works for some time how it should work and than
suddenly crashes. I suppose that problem you mention would manifest
itself right from the beginning, when XEmacPs_IntrHandler is called for
the first time? Moreover, I thought that lwIP doesn't use standard C
malloc() and free() functions (if you are talking about those), but have
custom heap-based function mem_malloc(), UNLESS we set option
MEM_LIBC_MALLOC to 1 , which I haven't done.


Mistake on my part - I thought you were using malloc and free.

You said the assert gets hit.  The one on line queue.c:1224 guards 
against the use of a mutex in an interrupt and the one in port.c against 
a non-interrupt safe function being called from an interrupt - so if a 
mutex is being used in an interrupt, the deferred handler bit of my last 
email would still hold true.


Regards,
Richard.

+ http://www.FreeRTOS.org
The de facto standard, downloaded every 4.2 minutes during 2015.

+ http://www.FreeRTOS.org/plus
IoT, Trace, Certification, TCP/IP, FAT FS, Training, and more...


___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users


Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-28 Thread Nenad Pekez

Richard, first of all, thanks for your quick response.

What I forgot to mention is that application doesn't crash at the very 
beginning, it actually works for some time how it should work and than 
suddenly crashes. I suppose that problem you mention would manifest 
itself right from the beginning, when XEmacPs_IntrHandler is called for 
the first time? Moreover, I thought that lwIP doesn't use standard C 
malloc() and free() functions (if you are talking about those), but have 
custom heap-based function mem_malloc(), UNLESS we set option 
MEM_LIBC_MALLOC to 1 , which I haven't done.


Regards,
Nenad

On 11/28/2016 4:16 PM, FreeRTOS Info wrote:


On 28/11/2016 02:17, pekez wrote:

Hello people,

I've been trying to figure out how lwIP uses memory and it's really
important to know exact (or maximum) amount of memory that lwIP uses. I
am using lwIP v1.4.1 with FreeRTOS v8.2.3 on ZYNQ custom board. Right
now, I am working with application examples provided by Xilinx (XAPP1026
). 


On ZYNQ board, I am running iperf 
server, and on PC iperf client.

When both MEMP_MEM_MALLOC and MEM_LIBC_MALLOC are 0 then everything
works completely expected. However, when I set MEMP_MEM_MALLOC to 1
(according to RAM usage article from lwIP wiki
), so that every piece of
dynamically allocated memory comes from heap of MEM_SIZE size,
application always crashes, no matter how big or small MEM_SIZE is (I
have a lot of RAM, so I tried to put MEM_SIZE to even more then 20 MB!).
Application crashes because two of FreeRTOS asserts fail, I get these
two prints: "Assert failed in file queue.c, line 1224" and "Assert
failed in file port.c, line 424". According to call trace (which I
provided in attachments), it crashes when XEmacPs_IntrHandler (I am
using Xilinx layer 2 drivers) tries to allocate memory for pbuf.

Is this problem even related to lwIP or maybe to FreeRTOS or Xilinx
drivers, what do you think? I am also providing the entire lwipopts.h,
so that you can see whether some other options need to be changed in
order to make application work with MEMP_MEM_MALLOC set to 1.


It sounds like you are trying to call malloc from an interrupt handler 
- which you can't do [in FreeRTOS] as the malloc is thread safe but 
not interrupt safe. One solution, albeit with a time penalty, is to 
use a deferred interrupt handler, where the IRQ does nothing more then 
unblock a very high priority task and clear the interrupt. Then the 
interrupt will return directly to the unblocked task to perform the 
actual processing necessary (the processing that was deferred from the 
interrupt). You can then optimise it so only interrupts that want to 
allocate memory get deferred to a task.


Example code snippets of how to do this can be found on the following 
page: 
http://www.freertos.org/RTOS_Task_Notification_As_Counting_Semaphore.html


Alternatively provide an additional heap for use just by the ISR so 
you don't get re-entrancy problems, or update the heap_n.c file 
(http://www.freertos.org/a00111.html) so it uses interrupt safe 
critical sections rather than task only critical sections (although 
this last option could make interrupts less responsive).


Regards,
Richard.

+ http://www.FreeRTOS.org
The de facto standard, downloaded every 4.2 minutes during 2015.

+ http://www.FreeRTOS.org/plus
IoT, Trace, Certification, TCP/IP, FAT FS, Training, and more...

___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users




---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus


___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users


Re: [lwip-users] lwIP with FreeRTOS memory problem

2016-11-28 Thread FreeRTOS Info


On 28/11/2016 02:17, pekez wrote:

Hello people,

I've been trying to figure out how lwIP uses memory and it's really
important to know exact (or maximum) amount of memory that lwIP uses. I
am using lwIP v1.4.1 with FreeRTOS v8.2.3 on ZYNQ custom board. Right
now, I am working with application examples provided by Xilinx (XAPP1026
).
On ZYNQ board, I am running iperf 
server, and on PC iperf client.

When both MEMP_MEM_MALLOC and MEM_LIBC_MALLOC are 0 then everything
works completely expected. However, when I set MEMP_MEM_MALLOC to 1
(according to RAM usage article from lwIP wiki
), so that every piece of
dynamically allocated memory comes from heap of MEM_SIZE size,
application always crashes, no matter how big or small MEM_SIZE is (I
have a lot of RAM, so I tried to put MEM_SIZE to even more then 20 MB!).
Application crashes because two of FreeRTOS asserts fail, I get these
two prints: "Assert failed in file queue.c, line 1224" and "Assert
failed in file port.c, line 424". According to call trace (which I
provided in attachments), it crashes when XEmacPs_IntrHandler (I am
using Xilinx layer 2 drivers) tries to allocate memory for pbuf.

Is this problem even related to lwIP or maybe to FreeRTOS or Xilinx
drivers, what do you think? I am also providing the entire lwipopts.h,
so that you can see whether some other options need to be changed in
order to make application work with MEMP_MEM_MALLOC set to 1.


It sounds like you are trying to call malloc from an interrupt handler - 
which you can't do [in FreeRTOS] as the malloc is thread safe but not 
interrupt safe. One solution, albeit with a time penalty, is to use a 
deferred interrupt handler, where the IRQ does nothing more then unblock 
a very high priority task and clear the interrupt. Then the interrupt 
will return directly to the unblocked task to perform the actual 
processing necessary (the processing that was deferred from the 
interrupt). You can then optimise it so only interrupts that want to 
allocate memory get deferred to a task.


Example code snippets of how to do this can be found on the following 
page: 
http://www.freertos.org/RTOS_Task_Notification_As_Counting_Semaphore.html


Alternatively provide an additional heap for use just by the ISR so you 
don't get re-entrancy problems, or update the heap_n.c file 
(http://www.freertos.org/a00111.html) so it uses interrupt safe critical 
sections rather than task only critical sections (although this last 
option could make interrupts less responsive).


Regards,
Richard.

+ http://www.FreeRTOS.org
The de facto standard, downloaded every 4.2 minutes during 2015.

+ http://www.FreeRTOS.org/plus
IoT, Trace, Certification, TCP/IP, FAT FS, Training, and more...

___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users