EasyWEB Example for NXP LPC23xx ported to GNU

Started by kurt_sterckx January 19, 2007
I have placed the file GNUEasyWeb.zip on the forum. This is a GNU
version of the EasyWeb example that can be found on the Keil web
site. They have taken the tiny web server from the 'Design &
Elektronik' extra issue 'Embedded Internet' (refer to:
www.elektroniknet.de/extraheft) and ported it to MCB2300 with the
RealView compiler. I have ported the code so that it can be compiled
with the gnu compiler (I use WinARM 20060606).

The Web server is a very good example for the MAC module.

I found a issue in the LPC2368 that can be demostrated with this
code. If you change NUM_RX_FLAGS in EMAC.h to 5 or more, the Receive
queue doesn't work like expected. You can check this with a couple
of pings, some will packets get lost, or the web server itself that
will go a lot slower. The reason is that a message is not placed at
RxProduceIndex but at WRAP(RxProduceIndex+1), after a second
rollover. When NUM_RX_FLAGS is 5, this means that the tenth message
is placed at index 0 and not 4 (full sequence is 0,1,2,3,4,0,1,2,3,!
0!,1,..). RxProduceIndex is adjust like expected. I am not sure
about this, so maybe somebody else can verify this.

There is a readme.txt in the zip file, please read it before asking
question about the code.

An Engineer's Guide to the LPC2100 Series

Thanks,
Works great right out the box on a lpc2378.

I'll be playing with it and let you know how it works out.

--- In l..., "kurt_sterckx" wrote:
>
> I have placed the file GNUEasyWeb.zip on the forum. This is a GNU
> version of the EasyWeb example that can be found on the Keil web
> site. They have taken the tiny web server from the 'Design &
> Elektronik' extra issue 'Embedded Internet' (refer to:
> www.elektroniknet.de/extraheft) and ported it to MCB2300 with the
> RealView compiler. I have ported the code so that it can be compiled
> with the gnu compiler (I use WinARM 20060606).
>
> The Web server is a very good example for the MAC module.
>
> I found a issue in the LPC2368 that can be demostrated with this
> code. If you change NUM_RX_FLAGS in EMAC.h to 5 or more, the Receive
> queue doesn't work like expected. You can check this with a couple
> of pings, some will packets get lost, or the web server itself that
> will go a lot slower. The reason is that a message is not placed at
> RxProduceIndex but at WRAP(RxProduceIndex+1), after a second
> rollover. When NUM_RX_FLAGS is 5, this means that the tenth message
> is placed at index 0 and not 4 (full sequence is 0,1,2,3,4,0,1,2,3,!
> 0!,1,..). RxProduceIndex is adjust like expected. I am not sure
> about this, so maybe somebody else can verify this.
>
> There is a readme.txt in the zip file, please read it before asking
> question about the code.
>
Hi Kurt,

How do I get the zip file? I cannot seem to find it here

Regards,

Peter

I have placed the file GNUEasyWeb.zip on the forum. This is a GNU
>version of the EasyWeb example that can be found on the Keil web
>site. They have taken the tiny web server from the 'Design &
>Elektronik' extra issue 'Embedded Internet' (refer to:
>www.elektroniknet.de/extraheft) and ported it to MCB2300 with the
>RealView compiler. I have ported the code so that it can be compiled
>with the gnu compiler (I use WinARM 20060606).
>
>The Web server is a very good example for the MAC module.
>
>I found a issue in the LPC2368 that can be demostrated with this
>code. If you change NUM_RX_FLAGS in EMAC.h to 5 or more, the Receive
>queue doesn't work like expected. You can check this with a couple
>of pings, some will packets get lost, or the web server itself that
>will go a lot slower. The reason is that a message is not placed at
>RxProduceIndex but at WRAP(RxProduceIndex+1), after a second
>rollover. When NUM_RX_FLAGS is 5, this means that the tenth message
>is placed at index 0 and not 4 (full sequence is 0,1,2,3,4,0,1,2,3,!
>0!,1,..). RxProduceIndex is adjust like expected. I am not sure
>about this, so maybe somebody else can verify this.
>
>There is a readme.txt in the zip file, please read it before asking
>question about the code.
Click on files on the left side of the window.
Try the IwIPWeb.zip instead. it has a much better stack.

--- In l..., peter@... wrote:
>
> Hi Kurt,
>
> How do I get the zip file? I cannot seem to find it here
>
> Regards,
>
> Peter
>
> I have placed the file GNUEasyWeb.zip on the forum. This is a GNU
> >version of the EasyWeb example that can be found on the Keil web
> >site. They have taken the tiny web server from the 'Design &
> >Elektronik' extra issue 'Embedded Internet' (refer to:
> >www.elektroniknet.de/extraheft) and ported it to MCB2300 with the
> >RealView compiler. I have ported the code so that it can be compiled
> >with the gnu compiler (I use WinARM 20060606).
> >
> >The Web server is a very good example for the MAC module.
> >
> >I found a issue in the LPC2368 that can be demostrated with this
> >code. If you change NUM_RX_FLAGS in EMAC.h to 5 or more, the Receive
> >queue doesn't work like expected. You can check this with a couple
> >of pings, some will packets get lost, or the web server itself that
> >will go a lot slower. The reason is that a message is not placed at
> >RxProduceIndex but at WRAP(RxProduceIndex+1), after a second
> >rollover. When NUM_RX_FLAGS is 5, this means that the tenth message
> >is placed at index 0 and not 4 (full sequence is 0,1,2,3,4,0,1,2,3,!
> >0!,1,..). RxProduceIndex is adjust like expected. I am not sure
> >about this, so maybe somebody else can verify this.
> >
> >There is a readme.txt in the zip file, please read it before asking
> >question about the code.
> >
>
Sashi ono, thanks for giving the answer, but the file is called
lwIPWeb.zip(starts with L) and not IwIPWeb.zip.

Compare
- GNUEasyWeb: very minimal TCP/IP stack with only TCP/IMCP
- lwIPWeb: mid level TCP/IP stack with TCP/UDP/SNMP/DHCP/IMCP, with
very good configuration options so it can be tuned for your own
memory requirements. Very, very, very easy to use without a OS, but
also with a OS. See http://www.sics.se/~adam/lwip/ for more info.

It should also be relative easy to port uIP
(http://www.sics.se/~adam/uip/) to the LPC23xx based on the
emac.c/.h code. uIP is smaller then lwIP, but I find it more
difficult to write a application for it.

Sashi ono, did you experiment with the NUM_RX_FLAGS value ?

Regards,

Kurt

--- In l..., "sashi ono" wrote:
>
> Click on files on the left side of the window.
> Try the IwIPWeb.zip instead. it has a much better stack.
>
> --- In l..., peter@ wrote:
> >
> > Hi Kurt,
> >
> > How do I get the zip file? I cannot seem to find it here
> >
> > Regards,
> >
> > Peter
> >
> > I have placed the file GNUEasyWeb.zip on the forum. This is a
GNU
> > >version of the EasyWeb example that can be found on the Keil
web
> > >site. They have taken the tiny web server from the 'Design &
> > >Elektronik' extra issue 'Embedded Internet' (refer to:
> > >www.elektroniknet.de/extraheft) and ported it to MCB2300 with
the
> > >RealView compiler. I have ported the code so that it can be
compiled
> > >with the gnu compiler (I use WinARM 20060606).
> > >
> > >The Web server is a very good example for the MAC module.
> > >
> > >I found a issue in the LPC2368 that can be demostrated with
this
> > >code. If you change NUM_RX_FLAGS in EMAC.h to 5 or more, the
Receive
> > >queue doesn't work like expected. You can check this with a
couple
> > >of pings, some will packets get lost, or the web server itself
that
> > >will go a lot slower. The reason is that a message is not
placed at
> > >RxProduceIndex but at WRAP(RxProduceIndex+1), after a second
> > >rollover. When NUM_RX_FLAGS is 5, this means that the tenth
message
> > >is placed at index 0 and not 4 (full sequence is
0,1,2,3,4,0,1,2,3,!
> > >0!,1,..). RxProduceIndex is adjust like expected. I am not sure
> > >about this, so maybe somebody else can verify this.
> > >
> > >There is a readme.txt in the zip file, please read it before
asking
> > >question about the code.
> > >
> > >
>