git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@106 35acf78f-673a-0410-8e92-d51de3d6d3f4
parent
97bf452043
commit
f851339621
|
@ -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">ちび</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&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 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, 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 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/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 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 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, <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>
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue