Issue
146 September 2002
Build
Your Own 8051 Web Server
by
Jim Brady
MEMORY
USAGE
Of
the 2.4 KB of RAM on the 8051, the lower 256 bytes are
used for frequently accessed variables. The 2048-byte
area of additional on-chip memory is addressed as XDATA
memory. Incoming and outgoing message buffers are dynamically
allocated from this space. Dynamic allocation is unusual
for an 8-bit CPU, but it makes sense here because sometimes
the incoming frame is large and the outgoing frame is
small (occasionally, it can also be the other way around).
At other times, the outgoing frame must be held in memory
while an ARP message is sent and received. The firmware
uses dynamic allocation using the library functions
malloc() and free(), provided with the Keil C compiler.
With this approach, no more RAM is tied up handing Ethernet
frames than there needs to be at any given moment.
When
it was all said and done, I had consumed 29 KB of the
32-KB flash memory. This reminds me of something I heard
once about projects expanding to fill available space.
The details are shown in Table 3. The TCP/IP portion
is small as stacks go, but remember that I have implemented
only a subset of TCP/IP here.
| Table
3—Here you can see the footprints of various
parts of the code. |
FUTURE
DIRECTIONS
All
things considered, I’m glad that I picked a part with
2.4 KB of RAM. A CPU with a few hundred bytes could
do the job, but I wouldn’t go through the trouble. It
would be interesting to port the code to a 16-bit DSP
chip and compare performance to this fast 8051. Most
DSPs have enough RAM. It would also be nice to have
a modular-size TCP/IP stack and create an API like the
big boys have. This will surely require more than 32
KB, but lo and behold, 64-KB flash memory 8051s are
already here.