Skip to content
Snippets Groups Projects
Select Git revision
  • f25e9f70cf1094483b7a2eea1ac9bb317d667f67
  • 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

  • Clone with SSH
  • Clone with HTTPS
  • Julien Forget's avatar
    Forget Julien authored
    git-svn-id: https://svn.onera.fr/Prelude/Prelude/trunk@863 49f62630-d767-4ccd-930e-b3f5589f52e1
    f25e9f70
    History
                                    Prelude
                                    -------
    
    Introduction
    ============
    
    Prelude is a high-level language for programming embedded control
    systems. It is built upon Synchronous Languages (such as Lustre) 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. A complete definition of the
    language is available in [forgetPHD] (see Section 4 mainly). A shorter
    presentation is available in [forgetSAC'10].
    
    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 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). Prelude compiler produces code for either monocore or
    multicore architectures.
    
    Distribution Directory Overview
    ===============================
    
    - INSTALL: Installation instructions.
    
    - README: This file.
    
    - lib: C library files required to compile C code generated by Prelude
    - lib/prelude: generic Prelude library files
    
    - examples: contains Prelude 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.
    
    The compiler generates two C files, named by default
    <program>_c/<main_node>.c and <program>_c/<main_node>.h
    
    As of version 1.2, there are two possible code generation modes:
    1) preludec -node <main_node> <program.plu>
    In this mode, precedences are encoded in task attributes. The resulting
    task set will execute without synchronization mechanisms
    (e.g. semaphores). This mode is suited for monocore architectures.
    
    The function "get_task_set" returns the number of tasks in the set and
    the task set itself. The structure of a task is defined in
    "lib/encoded_task_params.h". This structure consists in the real time
    attributes of the task and in a function pointer, which corresponds to
    the execution of one instance of the task.
    
    
    2) preludec -no_encoding -node <main_node> <program.plu>
    In this mode, precedences are not encoded and must be ensured by the
    scheduler at run-time. This mode is suited for multicore architectures.
    
    The function "get_task_set" returns the number of tasks in the set and
    the task set itself. The structure of a task is defined in
    "lib/nonencoded_task_params.h". In addition, the function
    "get_precedence_set" returns the number of precedence constraints and
    the set of constraints. The constraints structure is defined in
    "lib/multirate_precedence.h".
    
    In both cases, the code is completely independent from the target RTOS.
    
    Compiling and executing code generated by preludec
    ==================================================
    
    The code generated by preludec is not the complete final program. An
    "integration code" is required, to build threads from the task set
    defined in the generated code. This part is OS-dependent. From there,
    you have two choices:
    
    A- Using SchedMCore.
    
    Prelude integration is directly supported by the SchedMCore framework:
    1) Install SchedMCore from http://sites.onera.fr/schedmcore/
    2) Start by following the instructions in Examples/sampling_loop/README
    and by executing the example there.
    3) Follow the instructions in Examples/sampling_loop/README to adapt
    this example to your own program.
    
    B- Using your favorite RTOS:
    
    1) You need to implement the EDF policy modified to support deadline
    words, ie the equivalent of the "sched/sched_pluedf.c" included in
    SchedMCore source distribution.
    2) You need to implement the "integration code" that builds threads from
    the code generated by Prelude. This can be partly inspired from
    "tools/runner/schedmcore_main.c"
    3) Compile, link, execute.
    
    References
    ==========
    [forgetPHD]
    J. Forget
    A Synchronous Language for Critical Embedded Systems with Multiple Real-Time Constraints.
    PhD thesis, ISAE, Toulouse, France, November 2009.
    http://www.lifl.fr/~forget/docs/jforget-thesis.pdf
    
    [forgetSAC'10]
    J. Forget, F. Boniol, D. Lesens, C. Pagetti
    A Real-Time Architecture Design Language for Multi-Rate Embedded Control Systems
    In 25th ACM Symposium on Applied Computing (SAC'10), Sierre, Switzerland, March 22-26 2010.
    http://www.lifl.fr/~forget/docs/jforget-SAC10.pdf
    
    [PreludeSchedMCore-RTNS2011]
    M. Cordovilla, F. Boniol, J. Forget, E. Noulard, C. Pagetti
    Developing critical embedded systems on multicore architectures: the Prelude-SchedMCore toolset
    In 19th International Conference on Real-Time and Network Systems, RTNS2011, Sep. 3 2013.
    http://sites.onera.fr/schedmcore/sites/sites.onera.fr.schedmcore/files/2011-PreludeSchedMCore-RTNS_0.pdf
    
    --------------------------------------------------------------------------
      Contact Address:                          Home site:
      julien.forget@lifl.fr           http://www.lifl.fr/~forget/
                                      https://svn.onera.fr/Prelude
                                      https://forge.onera.fr/projects/prelude
    --------------------------------------------------------------------------