git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@106 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2007-11-23 13:26:04 +00:00
parent 97bf452043
commit f851339621
4 changed files with 160 additions and 6 deletions

151
docs/index.html Normal file
View File

@ -0,0 +1,151 @@
<!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 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><small><span class="t_nihongo_kanji" xml:lang="ja" lang="ja">&#12385;&#12403;</span></small>OS/RT<sup><font size="-2">TM</font></sup>
Homepage</h2>
(ChibiOS/RT)</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top; width: 150px;">Current
Version 0.4.2<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&amp;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> </td>
<td style="text-align: justify; vertical-align: top;">
<h3><a name="History"></a>History</h3>
This kernel 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&nbsp;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&nbsp;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, messages, events, virtual timers,
queues, I/O channels with timeout capability and much more.<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, port to other ARM families should be easy too. Both
ARM and THUMB modes are supported.</li><li>Atmel AVR, the port is almost complete but untested because I broke my JTAG probe...</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&nbsp;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&nbsp;<a href="http://chibios.sourceforge.net/doc/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&nbsp;starts at just
1.5KiB&nbsp;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 8KiB. 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 complier/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, &nbsp;<a href="http://gcc.gnu.org" target="_top">http://gcc.gnu.org</a></li>
<li>Doxigen, <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>

View File

@ -49,6 +49,8 @@ AVR-AT90CANx-GCC - Port on AVR AT90CAN128, not complete yet.
It is recommended to either use ARM mode or THUMB mode and not mix them
unless you know exactly what you are doing and understand the consequences.
Mixing is still supported anyway.
- More optimizations in the scheduler, an extra 4% performance found using
the default performance settings.
- Fixed a problem with the thread working area declarations, the alignment to
4 bytes boundary was not enforced. Now it is defined a new macro
WorkingArea(name, length) that takes care of both the allocation and the

View File

@ -26,11 +26,7 @@
/** @cond never*/
static ReadyList rlist;
#ifndef CH_CURRP_REGISTER_CACHE
Thread *currp;
#endif
ReadyList rlist;
#ifdef CH_USE_SYSTEMTIME
volatile t_time stime;

View File

@ -41,8 +41,13 @@ typedef struct {
ThreadsQueue r_queue;
t_prio r_prio;
t_cnt r_preempt;
#ifndef CH_CURRP_REGISTER_CACHE
Thread *r_current;
#endif
} ReadyList;
extern ReadyList rlist;
/*
* Scheduler APIs.
*/
@ -70,7 +75,7 @@ extern "C" {
#ifdef CH_CURRP_REGISTER_CACHE
register Thread *currp asm(CH_CURRP_REGISTER_CACHE);
#else
extern Thread *currp;
#define currp rlist.r_current
#endif
/**