git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@106 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
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
|
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.
|
unless you know exactly what you are doing and understand the consequences.
|
||||||
Mixing is still supported anyway.
|
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
|
- 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
|
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
|
WorkingArea(name, length) that takes care of both the allocation and the
|
||||||
|
|
|
@ -26,11 +26,7 @@
|
||||||
|
|
||||||
/** @cond never*/
|
/** @cond never*/
|
||||||
|
|
||||||
static ReadyList rlist;
|
ReadyList rlist;
|
||||||
|
|
||||||
#ifndef CH_CURRP_REGISTER_CACHE
|
|
||||||
Thread *currp;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CH_USE_SYSTEMTIME
|
#ifdef CH_USE_SYSTEMTIME
|
||||||
volatile t_time stime;
|
volatile t_time stime;
|
||||||
|
|
|
@ -41,8 +41,13 @@ typedef struct {
|
||||||
ThreadsQueue r_queue;
|
ThreadsQueue r_queue;
|
||||||
t_prio r_prio;
|
t_prio r_prio;
|
||||||
t_cnt r_preempt;
|
t_cnt r_preempt;
|
||||||
|
#ifndef CH_CURRP_REGISTER_CACHE
|
||||||
|
Thread *r_current;
|
||||||
|
#endif
|
||||||
} ReadyList;
|
} ReadyList;
|
||||||
|
|
||||||
|
extern ReadyList rlist;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scheduler APIs.
|
* Scheduler APIs.
|
||||||
*/
|
*/
|
||||||
|
@ -70,7 +75,7 @@ extern "C" {
|
||||||
#ifdef CH_CURRP_REGISTER_CACHE
|
#ifdef CH_CURRP_REGISTER_CACHE
|
||||||
register Thread *currp asm(CH_CURRP_REGISTER_CACHE);
|
register Thread *currp asm(CH_CURRP_REGISTER_CACHE);
|
||||||
#else
|
#else
|
||||||
extern Thread *currp;
|
#define currp rlist.r_current
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue