aboutsummaryrefslogtreecommitdiffstats
path: root/docs/index.html
blob: 07d2e6a3784313ff88246964b7e66ba6a57ed0d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<!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>ChibiOS/RT<sup><font size="-2">TM</font></sup>Homepage</h2>
      </td>
    </tr>
    <tr>
      <td style="text-align: center; vertical-align: top; width: 150px;">Current
Version 0.6.4<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><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&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, 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&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/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&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 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 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>