168 lines
9.5 KiB
HTML
168 lines
9.5 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html><head>
|
|
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
|
|
<title>ChibiOS/RT embedded RTOS homepage</title></head>
|
|
<body>
|
|
<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
|
<tbody>
|
|
<tr align="center">
|
|
<td colspan="2" rowspan="1">
|
|
<h2>ChibiOS/RT embedded RTOS homepage</h2>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: center; vertical-align: top; width: 150px;">Current
|
|
Version 1.1.0unstable<br>
|
|
-<br>
|
|
<a href="http://sourceforge.net/projects/chibios/" rel="me" target="_top">Project on SourceForge</a><br>
|
|
<a href="html/index.html" target="_top" rel="me">Documentation</a><br>
|
|
<a href="http://sourceforge.net/project/showfiles.php?group_id=205897" rel="me" target="_top">Downloads</a><br><a href="http://wiki.mechlab.net/doku.php?id=chibios:start" rel="me" target="_top">Wiki</a><br><a href="http://sourceforge.net/forum/?group_id=205897" rel="me" target="_top">Forum</a><br>
|
|
<a href="http://sourceforge.net/users/gdisirio/" rel="me" target="_top">Contact me</a><br>
|
|
-<br>
|
|
<a href="#History">History</a><br>
|
|
<a href="#Description">Description</a><br><a href="index.html#Current_ports">Current ports</a><br>
|
|
<a href="#Design">Design</a><br><a href="#Performance_and_Size">Performance and Size</a><br>
|
|
<a href="#Future">Future</a><br>
|
|
-<br>
|
|
<a href="#Credits">Credits</a><br>
|
|
<br>
|
|
<a href="http://sourceforge.net"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=205897&type=4" alt="SourceForge.net Logo" border="0" height="37" width="125"></a><br>
|
|
<br>
|
|
<a href="http://sourceforge.net/donate/index.php?group_id=205897"><img src="http://images.sourceforge.net/images/project-support.jpg" alt="Support This Project" border="0" height="32" width="88"></a><br><br>
|
|
<!-- Inizio Codice Shinystat -->
|
|
<script type="text/javascript" language="JavaScript" src="http://codice.shinystat.com/cgi-bin/getcod.cgi?USER=ChibiOS"></script>
|
|
<noscript>
|
|
<a href="http://www.shinystat.com/it" target="_top">
|
|
<img src="http://www.shinystat.com/cgi-bin/shinystat.cgi?USER=ChibiOS" alt="Statistiche" border="0"></a>
|
|
</noscript>
|
|
<!-- Fine Codice Shinystat -->
|
|
</td>
|
|
<td style="text-align: justify; vertical-align: top;">
|
|
<h3><a name="History"></a>History</h3>
|
|
This RTOS is something I wrote back in 1990 for use on boards
|
|
equipped
|
|
with M68K processors, the development was made on an Atari ST. The OS
|
|
worked well for its intended purpose, Internet was not
|
|
widespread at that time so the system had a limited use.<br>
|
|
Recently I decided to release this system, formerly known as <span style="font-style: italic;">mkRTOS</span>, as Free
|
|
Software. I cleaned up the code, improved the documentation, made a
|
|
port on a more modern architecture (ARM) and it is finally ready.<br>
|
|
While ChibiOS/RT is a new product it is based on a proven system so the
|
|
alpha/beta phases should not last long, the project was started as an
|
|
alpha
|
|
version mainly to be able to incorporate the feedback into the
|
|
product easily.<br>
|
|
<h3><a name="Description"></a>Description</h3>
|
|
ChibiOS/RT is designed for embedded applications and it is meant to be
|
|
linked with the application code. The design philosophy is to make it
|
|
easy to use so I hope that all the APIs are meaningful, easy to
|
|
understand and with the parameters you would expect from them.<br>The
|
|
system offers threads, semaphores, mutexes, messages, events, virtual
|
|
timers,
|
|
queues, I/O channels with timeout capability and much more. The
|
|
Priority Inheritance algorithm is implemented through the Mutexes
|
|
mechaninsm, the implementation supports any number of threads and
|
|
nested mutexes.<br>
|
|
<h3><a name="Current_ports"></a>Current
|
|
ports</h3>
|
|
Currently the ChibiOS/RT is ported to the following architectures:<br>
|
|
<ul>
|
|
<li>ARM7TDMI-LPC214x, the port to other LPC2000 chips
|
|
should be trivial. Both ARM and THUMB modes are supported.</li>
|
|
<li>ARM7TDMI-AT91SAM7X256, this port also supports other Atmel
|
|
chips: SAM7XC, SAM7S and the various sizes (128, 256, 512) with
|
|
minimal changes.</li>
|
|
<li>ARM Cortex-M3, ST Microelectronics STM32.</li>
|
|
<li>Atmel AVR: AT90CAN128 and ATmega128 demos included.</li>
|
|
<li>Texas Instruments MSP430, complete but untested.</li>
|
|
<li>x86 as a Win32 process, this port allows to write
|
|
your application on the PC without the need of a development
|
|
board/simulator/emulator. Communication ports are simulated over
|
|
sockets, you can telnet on the simulator ports for the debug. I am
|
|
considering to create a similar simulator into a Linux process.</li>
|
|
<li>M68K, this was the original target but it is
|
|
currently removed from the source tree because currently I have no way
|
|
to test it, my old Atari ST is long dead. It should be very easy to
|
|
revive the port to the M68K or Coldfire CPUs.</li>
|
|
</ul>
|
|
In general the port is very easy on architectures that can handle well
|
|
linked lists, the kernel is entirely reliant on lists so this
|
|
is a
|
|
very important efficiency factor. 16 and 32 bits architectures are
|
|
always fine, 8 bit architectures should be evaluated case by case but
|
|
are not ruled out, something like an H8 would not have problems. You
|
|
could port it
|
|
to a Z80/Z180 (I considered that too, and made tests using the SDCC
|
|
compiler) but the
|
|
resulting code is not much efficient because the instruction set is
|
|
missing the indirect addressing for 16 bits values that is important
|
|
for efficient linked lists traversal.
|
|
<h3><a name="Design"></a>Design</h3>
|
|
The system was designed to be stable and avoid trouble as much as
|
|
possible so some rules were set:<br>
|
|
<ul>
|
|
<li>No arrays or tables, I don't like to have to
|
|
configure limits
|
|
for data structures, only use lists or other dynamic data structures.
|
|
See
|
|
the <a href="http://chibios.sourceforge.net/html/index.html" target="_top" rel="me">Documentation</a> and
|
|
the demos.</li>
|
|
<li>No memory allocation inside the kernel, an allocator
|
|
can be
|
|
troublesome for RT applications. All the data structures are declared
|
|
in the application code and not allocated from a shared system heap.
|
|
This does not prevent the application code to use an allocator if
|
|
needed, it is just the kernel that does not require it.</li>
|
|
<li>No weird macros in the user code, everything should
|
|
look
|
|
and feel like normal C code with a normal main() function. I don't like
|
|
to bring someone else weird programming habits in my code and I think
|
|
this is true for everybody.</li>
|
|
<li>Encapsulate all the things that need changes while
|
|
porting
|
|
the OS to new architectures in few template files, fill the code into
|
|
the templates and the port is done.</li></ul><h3><a name="Performance_and_Size"></a>Performance and Size</h3>ChibiOS/RT
|
|
has a wide set of APIs but all the subsystems can be included or
|
|
removed from the memory image by editing the kernel configuration file
|
|
chconf.h. On ARM processors, the kernel size starts at just
|
|
1.5KiB depending on the included subsystems and the choosen
|
|
compiler optimizations.<br>As reference, a kernel configured with...<br><ul><li>System startup code</li><li>Chip initialization code</li><li>Multithreading APIs</li><li>Virtual Timer APIs</li><li>Semaphore APIs</li><li>System time + Sleep API</li><li>Suspend/Resume APIs</li><li>Small main() program with flashing LEDs demo and 3 threads</li></ul>...just takes 2.11KiB of program space when compiled using THUMB code and space optimizations. Note that this is quite a <span style="font-weight: bold;">typical configuration</span>
|
|
not a minimal one. A kernel configured with all the options and
|
|
optimized for speed takes about 6KiB. See the documentation about the
|
|
many available subsystems.<br><br>About performance, on a 48MHz LPC
|
|
ARM7 processor the kernel is capable of context switch time ranging
|
|
from 3 to 6 microseconds depending on the code type (ARM/THUMB) and the
|
|
choosen compiler/kernel optimizations. In the distribution is included
|
|
a spreadsheet with the exact values and the various space/time trade
|
|
offs.<br>The context switch time is *measured* using 2 threads
|
|
exchanging messages and doing *real* work, it is not a calculated peak
|
|
value. See the demo code, it includes the benchmark.
|
|
<h3><a name="Future"></a>Future</h3>
|
|
Expect:<br><ul>
|
|
|
|
<li>Documentation improvements.</li>
|
|
|
|
<li>Ports to more architectures/boards when I am able to
|
|
put my hands on new hardware/tools.</li>
|
|
<li>More demos.</li>
|
|
<li>Creation of new subsystems.</li>
|
|
<li>Integration with
|
|
existing other free projects like: TCP/IP stacks, File Systems etc.</li>
|
|
</ul>
|
|
<h3><a name="Credits"></a>Credits</h3>
|
|
ChibiOS/RT was created using:<br>
|
|
<ul>
|
|
<li>7-Zip, <a href="http://7-zip.org" target="_top">http://7-zip.org</a></li>
|
|
<li>GCC and GNU binutils, <a href="http://gcc.gnu.org" target="_top">http://gcc.gnu.org</a></li>
|
|
<li>Doxygen, <a href="http://www.doxygen.org" target="_top">http://www.doxygen.org</a></li>
|
|
<li>Inkscape, <a href="http://www.inkscape.org" target="_top">http://www.inkscape.org</a></li>
|
|
<li>MinGW, <a href="http://mingw.org" target="_top">http://mingw.org</a></li>
|
|
<li>NVU, <a href="http://www.nvu.com/" target="_top">http://www.nvu.com</a></li>
|
|
<li>YAGARTO, <a href="http://www.yagarto.de" target="_top">http://www.yagarto.de</a></li>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
</body></html> |