<ahref="http://sourceforge.net/donate/index.php?group_id=205897"><imgsrc="http://images.sourceforge.net/images/project-support.jpg"alt="Support This Project"border="0"height="32"width="88"></a></td>
<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><aname="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 <spanstyle="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><aname="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>