nuttx/Documentation/NuttX.html
patacongo 731e425116 Add support for Pascal P-Code interpreter
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@511 42af7a65-404d-4744-a932-0658087f49c3
2008-01-05 19:05:31 +00:00

800 lines
19 KiB
HTML

<html>
<head>
<title>NuttX</title>
</head>
<body background="backgd.gif">
<hr><hr>
<table width ="100%">
<tr align="center" bgcolor="#e4e4e4">
<td>
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
<p>Last Updated: January 1, 2008</p>
</td>
</tr>
</table>
<hr><hr>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<h1>Table of Contents</h1>
</td>
</tr>
</table>
<center><table width ="80%">
<tr>
<td>
<table>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="#overview">Overview</a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="#downloads">Downloads</a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="#platforms">Supported Platforms</a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="#footprint">Memory Footprint</a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="#licensing">Licensing</a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="#history">Release History</a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="#TODO">Bugs, Issues, <i>Things-To-Do</i></a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="#documentation">Other Documentation</a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="#trademarks">Trademarks</a></td>
</tr>
</table>
</td>
</td>
</table></center>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="overview"><h1>Overview</h1></a>
</td>
</tr>
</table>
<p>
<b>Goals</b>.
Nuttx is a real timed embedded operating system (RTOS).
Its goals are:
<p>
<center><table width="90%">
<tr>
<td valign="top" width="18"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Small Footprint</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
Usable in all but the tightest micro-controller environments,
The focus is on the tiny-to-small, deeply embedded environment.
</p>
</tr>
<tr>
<td valign="top" width="18"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Rich Feature OS Set</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
The goal is to provide implementations of most standard POSIX OS interfaces
to support a rich, multi-threaded development environment for deeply embedded
processors.
</p>
NON-GOALS: (1) It is not a goal to provide the rich level of OS
features like those provided with Linux.
Small footprint is more important than features.
Standard compliance is more important than small footprint.
(2) There is no MMU-based support for processes.
At present, NuttX assumes a flat address space.
</p>
</tr>
<tr>
<td valign="top" width="18"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Highly Scalable</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
Fully scalable from tiny (8-bit) to moderate embedded (32-bit).
Scalability with rich feature set is accomplished with:
Many tiny source files, link from static libraries, highly configurable, use of
weak symbols when available.
</p>
</tr>
<tr>
<td valign="top" width="18"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Standards Compliance</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
NuttX strives to achieve a high degree of standards compliance.
The primary governing standards are POSIX and ANSI standards.
Additional standard APIs from Unix and other common RTOS's are
adopted for functionality not available under these standards
or for functionaly that is not appropriate for the deeply-embedded
RTOS (such as <code>fork()</code>).
</p>
<p>
Because of this standards conformance, software developed under other
standard OSs (such as Linux) should port easily to NuttX.
</p>
</tr>
<tr>
<td valign="top" width="18"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Real-Time</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
Fully pre-emptible, fixed priority and round-robin scheduling.
</p>
</tr>
<tr>
<td valign="top" width="18"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Totally Open</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
Non-restrictive BSD license.
</p>
</tr>
</table></center>
<p>
<b>Feature Set</b>.
Key features of NuttX include:
<p>
<center><table width="90%">
<tr>
<td valign="top" width="18"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Standards Compliant Core Task Management</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Modular, micro-kernel</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Fully pre-emptible.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Naturally scalable.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Easily extensible to new processor architectures, SoC architecture, or board architectures.
A <a href="NuttxPortingGuide.html">Porting Guide</a> is in development.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>FIFO and round-robin scheduling.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Realtime, deterministic.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>POSIX/ANSI-like task controls, named message queues, counting semaphores, clocks/timers, signals, pthreads, environment variables, filesystem.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>VxWorks-like task management and watchdog timers.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>BSD socket interface.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Extensions to manage pre-emption.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Well documented in the NuttX <a href="NuttxUserGuide.html">User Guide</a>.</li>
</p>
</tr>
<tr>
<td valign="top" width="18"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>File system</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Tiny in-memory, root pseudo-file-system.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Supports character and block drivers.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Network and serial driver architecture.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Mount-able volumes. Bind mountpoint, filesystem, and block device driver.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>VFAT filesystem support.</li>
</p>
</tr>
<tr>
<td valign="top" width="18"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>C Library</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Fully integrated into the OS.</li>
</p>
</tr>
<tr>
<td valign="top" width="18"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Networking</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>TCP/IP, UDP, ICMP stacks.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Small footprint (based on uIP).</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>BSD compatible socket layer.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Networking utilities.</li>
</p>
</tr>
</table></center>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="downloads"><h1>Downloads</h1></a>
</td>
</tr>
</table>
<p>
The 17th release of NuttX (nuttx-0.3.5) is available for download
from the <a href="http://sourceforge.net/project/showfiles.php?group_id=189573">SourceForge</a>
website.
The change log associated with the release is available <a href="#currentrelease">here</a>.
Unreleased changes after this release are avalable in CVS.
These unreleased changes are listed <a href="#pendingchanges">here</a>.
</p>
<p>
NuttX 0.3.5 is the 6th release containing the integration of a network
subsystem and the uIP TCP/IP, UDP, and ICMP stacks based on
<a href="http://www.sics.se/~adam/uip/index.php/Main_Page">uIP</a>
into NuttX.
</p>
<p>
This release is primarily a bug-fix release and intended to synchronize
with the current CVS contents. See the <a href="#currentrelease">ChangeLog</a>
for a detailed list of changes and fixes.
</p>
<p>
The level of network reliability is at a strong beta release level. The
baseline functionality of NuttX continues to mature and remains at
post-beta or production level.
Extensive testing has been done for the ARM architecture using the GCC
compiler/toolchain.
Other architectures and the SDCC toolchain are also supported but not as
well exercised.
</p>
<p>
This release was verified only on the Spectrum Digital C5471 EVM using
the C5471 Ethernet driver. Any feedback about bugsor suggestions for
improvement would be greatly appreciated.
</p>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="platforms"><h1>Supported Platforms</h1></a>
</td>
</tr>
</table>
<center><table width="90%">
<tr>
<td valign="top"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Linux User Mode</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
A user-mode port of NuttX to the x86 Linux platform is available.
The purpose of this port is primarily to support OS feature developement.
</p>
<p>
<b>STATUS:</b>
Does not support interrupts but is otherwise fully functional.
</p>
</td>
</tr>
<tr>
<td valign="top"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>ARM7TDMI</b>.
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<b>TI TMS320C5471</b> (also called <b>C5471</b> or <b>TMS320DA180</b> or <b>DA180</b>).
NuttX operates on the ARM7 of this dual core processor.
This port uses the <a href="http://www.spectrumdigital.com/">Spectrum Digital</a>
evaluation board with a GNU arm-elf toolchain* under Linux or Cygwin.
</p>
<p>
<b>STATUS:</b>
This port is complete, verified, and included in the initial NuttX release.
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<b>NXP LPC214x</b>.
Support is provided for the NXP LPC214x family of processors. In particular,
support is provided for the mcu123.com lpc214x evaluation board (LPC2148).
This port also used the GNU arm-eld toolchain* under Linux or Cygwin.
</p>
<p>
<b>STATUS:</b>
Initial coding of this port code complete but has not yet been verified.
</p>
</td>
</tr>
<tr>
<td valign="top"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>ARM926EJS</b>.
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<b>TI TMS320DM320</b> (also called <b>DM320</b>).
NuttX operates on the ARM9 of this dual core processor.
This port uses the
<a href="http://wiki.neurostechnology.com/index.php/Developer_Welcome">Neuros OSD</a>
with a GNU arm-elf toolchain* under Linux or Cygwin.
</p>
<p>
<b>STATUS:</b>
This port is complete and verified.
</p>
</td>
</tr>
<tr>
<td valign="top"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>8052 Microcontroller</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<b>PJRC 87C52 Development Board</b>.
This port uses the <a href="http://www.pjrc.com/">PJRC</a> 87C52 development system
and the <a href="http://sdcc.sourceforge.net/">SDCC</a> toolchain under Linux or Cygwin.
</p>
<p>
<b>STATUS:</b>
This port is complete but not stable with timer interrupts enabled.
There seems to be some issue when the stack pointer enters into the indirect IRAM
address space during interrupt handling.
This architecture has not been built in some time will likely have some compilation
problems because of SDCC compiler differences.
</p>
</td>
</tr>
<tr>
<td valign="top"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Z80</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<b>Z80 Instruction Set Simulator</b>.
This port uses the <a href="http://sdcc.sourceforge.net/">SDCC</a> toolchain
under Linux or Cygwin (verfied using version 2.6.0).
This port has been verified using only a Z80 instruction simulator.
That simulator can be found in the NuttX CVS
<a href="http://nuttx.cvs.sourceforge.net/nuttx/misc/sims/z80sim/">here</a>.
</p>
<p>
<b>STATUS:</b>
This port is complete and stable to the extent that it can be teste
using an instruction set simulator.
</p>
</td>
</tr>
<tr>
<td valign="top"><img src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Other ports</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
There are partial ports for the TI TMS320DM270 and for MIPS.
</p>
</td>
</tr>
</table></center>
<blockquote>* A highly modified <a href="http://buildroot.uclibc.org/">buildroot</a>
is available that may be used to build a NuttX-compatible arm-elf toolchain under
Linux or Cygwin.</blockquote>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="footprint"><h1>Memory Footprint</h1></a>
</td>
</tr>
</table>
<ul>
<p><b>C5471 (ARM7)</b>
The build for this ARM7 target that includes most of the OS features and
a broad range of OS tests. The size of this executable as given by the
Linux <tt>size</tt> command is (3/9/07):
</p>
<pre>
text data bss dec hex filename
53272 428 3568 57268 dfb4 nuttx
</pre>
<p><b>DM320 (ARM9)</b>
This build for the ARM9 target includes a significant subset of OS
features, a filesystem, Ethernet driver, full TCP/IP, UDP and (minimal)
ICMP stacks (via uIP) and a small network test application: (11/8/07,
configuration netconfig, examples/nettest)
</p>
<pre>
text data bss dec hex filename
49472 296 3972 53740 d1ec nuttx
</pre>
<p>
Another build for the ARM9 target includes a minimal OS feature
set, Ethernet driver, full TCP/IP and (minimal) ICMP stacks, and
a small webserver: (11/20/07, configuration uipconfig, examples/uip)
</p>
<pre>
text data bss dec hex filename
52040 72 4148 56260 dbc4 nuttx
</pre>
<p><b>87C52</b>
A reduced functionality OS test for the 8052 target requires only
about 18-19Kb:
</p>
<pre>
Stack starts at: 0x21 (sp set to 0x20) with 223 bytes available.
Other memory:
Name Start End Size Max
---------------- -------- -------- -------- --------
PAGED EXT. RAM 0 256
EXTERNAL RAM 0x0100 0x02fd 510 7936
ROM/EPROM/FLASH 0x2100 0x6e55 19798 24384
</pre>
</ul>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="licensing"><h1>Licensing</h1></a>
</td>
</tr>
</table>
<ul>
<p>
NuttX is available under the highly permissive
<a href="http://en.wikipedia.org/wiki/BSD_license">BSD license</a>.
Other than some fine print that you agree to respect the copyright
you should feel absolutely free to use NuttX in any environment and
without any concern for jeopardizing any proprietary software that
you may link with it.
</p>
</ul>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="history"><h1>Release History</h1></a>
</td>
</tr>
</table>
<ul>
<p>
The current NuttX Change Log is available in CVS <a href="http://nuttx.cvs.sourceforge.net/*checkout*/nuttx/nuttx/ChangeLog">here</a>.
ChangeLog snapshots associated with the current release are available below.
</p>
</ul>
<center><table width ="80%">
<tr>
<td><img src="favicon.ico"></td>
<td>
<a href="ChangeLog.txt">Change Logs for all releases</a><br>
</td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td>
<a href="#currentrelease">ChangeLog for Current Release</a><br>
</td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td>
<a href="#pendingchanges">Unreleased Changes</a>
</td>
</tr>
</table></center>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="currentrelease">ChangeLog for Current Release</a>
</td>
</tr>
</table>
<pre><ul>
0.3.5 2007-12-18 Gregory Nutt <spudmonkey@racsa.co.cr>
* Added inet_ntoa() and ether_ntoa()
* Added netdev_foreach() to support traversal of registered network devices
* Added support for 'ifconfig' command to NSH (examples/nsh)
* Moved MAC and ethernet definitions to net/ethernet.h
* Fix sim and DM90x0 compilation errors introduced in 0.3.4
* Fixed errors in C5471 configuration files for examples/uip
* Modified DHCPC (netutils/dhcpc) so that it should work in environments where
there are more than one DHCPD server.
* NSH ifconfig command now shows uIP status was well (examples/nsh)
</pre></ul>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="pendingchanges">Unreleased Changes</a>
</td>
</tr>
</table>
<pre><ul>
0.3.6 2007-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
* Changes for use with SDCC compiler
* Added a simulated z80 target
* Fix deadlock errors when using stdio but with no buffering
* Add support for Pascal P-Code interpreter
</pre></ul>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="TODO"><h1>Bugs, Issues, <i>Things-To-Do</i></h1></a>
</td>
</tr>
</table>
<ul>
<p>
The current list of NuttX <i>Things-To-Do</i> in CVS <a href="http://nuttx.cvs.sourceforge.net/*checkout*/nuttx/nuttx/TODO">here</a>.
A snapshot of the <i>To-Do</i> list associated with the current release are available <a href="TODO.txt">here</a>.
</p>
</ul>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="documentation"><h1>Other Documentation</h1></a>
</td>
</tr>
</table>
<ul><table>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="NuttxUserGuide.html">User Guide</a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="NuttxPortingGuide.html">Porting Guide</a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="ChangeLog.txt">Change Log</a></td>
</tr>
<tr>
<td><img src="favicon.ico"></td>
<td><a href="TODO.txt">To-Do List</a></td>
</tr>
</center></ul>
<small>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="trademarks"><h1>Trademarks</h1></a>
</td>
</tr>
</table>
<ul>
<li>ARM, ARM7 ARM7TDMI, ARM9, ARM926EJS are trademarks of Advanced RISC Machines, Limited.</li>
<li>Cygwin is a trademark of Red Hat, Incorporated.</li>
<li>Linux is a registered trademark of Linus Torvalds.</li>
<li>LPC2148 is a trademark of NXP Semiconductors.</li>
<li>TI is a tradename of Texas Instruments Incorporated.</li>
<li>UNIX is a registered trademark of The Open Group.</li>
<li>VxWorks is a registered trademark of Wind River Systems, Incorporated.</li>
<li>Z80 is a registered trademark of Zilog, Inc.</li>
</ul>
<p>
NOTE: NuttX is <i>not</i> licensed to use the POSIX trademark. NuttX uses the POSIX
standard as a development guideline only.
</p>
</small>
</body>
</html>