|
|
|
<i>Prelude</i> is a high-level language for programming real-time embedded
|
|
|
|
control systems. It is built upon Synchronous Languages (such as
|
|
|
|
<a href="http://en.wikipedia.org/wiki/Lustre_%28programming_language%29">Lustre</a>)
|
|
|
|
and inherits their formal properties. It adds real-time primitives to
|
|
|
|
enable the programming of multi-periodic systems. The objective of the
|
|
|
|
language is not to replace other synchronous languages but instead to
|
|
|
|
provide a higher layer of abstraction, on top of classic synchronous
|
|
|
|
languages. It can be considered as a real-time software architecture
|
|
|
|
language that enables to assemble locally mono-periodic synchronous
|
|
|
|
systems into a globally multi-periodic synchronous system. <br><br>
|
|
|
|
<i>Prelude</i> is a high-level language for programming real-time embedded control systems. It is a data-flow synchronous language, similar to <a href="http://en.wikipedia.org/wiki/Lustre_%28programming_language%29">Lustre</a>. It provides real-time primitives for the programming of multi-periodic systems. Compared to other synchronous languages, it considers a higher layer of abstraction. It can be considered as a real-time software architecture language, designed to assemble locally mono-periodic synchronous systems into a globally multi-periodic synchronous ones. <br><br>
|
|
|
|
|
|
|
|
The <i>preludec</i> compiler generates synchronized multi-task C
|
|
|
|
code, that is independent of the target OS. Communication is achieved by
|
|
|
|
a tailor-made buffering communication protocol. The compilation was
|
|
|
|
defined formally and produces completely deterministic code, which
|
|
|
|
respects the real-time semantics of the original program (period,
|
|
|
|
deadlines, release dates and precedences) as well as its functional
|
|
|
|
semantics (respect of variables consumption). The Prelude compiler produces
|
|
|
|
code for either monocore or multicore architectures.<br>
|
|
|
|
The <i>preludec</i> compiler generates synchronized multi-task C code, that is independent of the target OS. Communication is achieved by a tailor-made buffering communication protocol. The compilation is defined formally and produces code that respects the temporal semantics of the original program (periods,
|
|
|
|
deadlines, release dates and precedence constraints), as well as its functional semantics (data-dependencies). The Prelude compiler produces code for either monocore or multicore architectures.<br>
|
|
|
|
|
|
|
|
<h3>Documentation</h3>
|
|
|
|
|
| ... | ... | @@ -32,21 +17,7 @@ mainly); |
|
|
|
</li><li> For installation, check the INSTALL file of the distribution.
|
|
|
|
</li></ul>
|
|
|
|
|
|
|
|
<h3>Download</h3>
|
|
|
|
|
|
|
|
You can download Prelude from
|
|
|
|
its <a href="https://forge.onera.fr/projects/prelude/files">forge</a>
|
|
|
|
(the user 'guest' (passwd: 'oneraguest') can be used to file a bug report or access read-only sections of the Forge).
|
|
|
|
<br><br>
|
|
|
|
You will need OCaml installed to compile the source distribution, which
|
|
|
|
should be packaged for most Linux distributions, otherwise you can get
|
|
|
|
it from <a href="http://caml.inria.fr/">here</a>.
|
|
|
|
To compile the code generated by <tt>preludec</tt>, the simplest way is to
|
|
|
|
install <a href="http://sites.onera.fr/schedmcore/">SchedMCore</a>.
|
|
|
|
You can however use your favorite RTOS instead, following the
|
|
|
|
instructions in the README.<br><br>
|
|
|
|
|
|
|
|
<b>Feedback</b> is welcome and encouraged: <i><tt> Email:julien dot forget at univ-lille1 dot fr</tt></i><br>
|
|
|
|
<b>Feedback</b> is welcome and encouraged: <i><tt> Email:julien dot forget at univ-lille dot fr</tt></i><br>
|
|
|
|
|
|
|
|
<h3>Supported features</h3>
|
|
|
|
The following features are supported by the current distribution:
|
| ... | ... | @@ -55,11 +26,7 @@ The following features are supported by the current distribution: |
|
|
|
<li> Language features:
|
|
|
|
<ul>
|
|
|
|
<li> Synchronous semantics;
|
|
|
|
</li><li> Periodicity constraints (through strictly periodic clocks);
|
|
|
|
</li><li> Deadline constraints;
|
|
|
|
</li><li> Strictly periodic clocks and associated transformations: periodic
|
|
|
|
over-sampling (<tt>*^</tt>), periodic under-sampling (<tt>/^</tt>), phase offset (<tt>~></tt>), clock tail
|
|
|
|
(<tt>tail</tt>) and clock concatenation (<tt>::</tt>);
|
|
|
|
</li><li> Periodicity constraints;
|
|
|
|
</li><li> Classic synchronous operators: delay (<tt>fby</tt>), Boolean
|
|
|
|
under-sampling (<tt>when</tt>) and Boolean over-sampling (<tt>merge</tt>);
|
|
|
|
</li><li> Clocks polymorphism;
|
| ... | ... | @@ -73,5 +40,5 @@ The following features are supported by the current distribution: |
|
|
|
</li><li> Deadline calculus.
|
|
|
|
</li></ul>
|
|
|
|
</li><li> Muli-threaded C code generation (independent from the target OS);
|
|
|
|
</li><li> Code suited for either monocore or multicore artchitectures.
|
|
|
|
</li><li> Monocore and multicore artchitectures.
|
|
|
|
</li></ul> |