Skip to content
Snippets Groups Projects
Select Git revision
  • 2df0358bb22ee21aa7247368c98ecd3237e979a4
  • master default protected
  • ffort_aer
  • ffort_mode_change
  • ffort_non_periodic_rate_op
  • ffort_dune
  • aer_split
  • prelude_remy
  • lustre_compiler
  • java
  • lustre_compiler_thirioux
  • interlude
  • lustre_simulator
  • lustre_validator
  • add_double_type
  • compil_propre
  • prelude_new_types
  • prelude-1.7.0
  • prelude-1.6.1
  • prelude-1.6.0
  • prelude-1.5.1
  • prelude-1.5.2
  • prelude-1.5
  • prelude-1.4
  • prelude-1.3
  • prelude-1.3@650
  • prelude-1.2
  • fin-these
28 results

prelude

Julien Forget's avatar
Forget Julien authored
2df0358b
History

Introduction

Prelude is a high-level language for programming real-time embedded control systems. It is a data-flow synchronous language, similar to Lustre. 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.

The preludec 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.

Distribution directory overview

  • INSTALL: Installation instructions.

  • README.md: This file.

  • lib/prelude: C header files included in C code generated by Prelude

  • share: C source files and makefiles to compile and link C programs generated by Prelude

  • examples: program examples

  • examples/sampling_loop: a complete example with everything required to execute it. For new users, the README there is a good starting point.

Using preludec

Use preludec -help for a complete list of options.

For a standard compilation with default options, use: preludec -node <main_node> <program.plu>

The compiler generates two C files: <program>_c/<main_node>.c and <program>_c/<main_node>.h

The main variants for the code generation are:

  • -aer: produce code that follows the Acquisition-Execution-Restitution multi-phase task model, which splits execution into communication phases (A/R) and computation phases (E);

  • -with_encoding: communication synchronizations are ensured by precedence encoding mechanisms (default): mono-phase task model+synchronizations are ensured by semaphores

In all variants, the code is completely independent from the target RTOS.

Compiling and executing code generated by preludec

The code generated by preludec is not a complete program. An "integration code" is required, to build threads/tasks from the task set defined in the generated code. This part is OS-dependent. From there, you have several choices:

  • Using Linux+ptask

    1. Install ptask
    2. Start by following the instructions in Examples/sampling_loop/README
    3. Follow the instructions in that README to adapt your own program.
  • Using your favorite RTOS:

    1. You need to implement the "integration code" that builds threads from the code generated by Prelude. See share/ptask_wrapper.c for an example;
    2. If you want to rely on the scheduling policy based on precedence encoding, you need to implement the EDF policy modified to support deadline words, i.e. the equivalent of the "sched/sched_pluedf.c" included in SchedMCore source distribution.

References

Wiki: https://gitlab.cristal.univ-lille.fr/forget/prelude/-/wikis/home