reactor-c
C Runtime for Lingua Franca
Loading...
Searching...
No Matches
environment.h File Reference

API for the environment data structure. More...

#include "lf_types.h"
#include "low_level_platform.h"
#include "tracepoint.h"

Go to the source code of this file.

Data Structures

struct  environment_t
 Execution environment. This struct contains information about the execution environment. An execution environment maintains a notion of a "current tag" and has its own event queue and scheduler. Normally, there is only one execution environment, but if you use scheduling enclaves, then there will be one for each enclave. More...
 

Macros

#define GLOBAL_ENVIRONMENT   NULL
 The global environment. Some operations are not specific to a particular scheduling enclave and therefore have no associated environment. When invoking a function such as lf_critical_section_enter, which requires an environment argument, it may be possible to pass this GLOBAL_ENVIRONMENT. For lf_critical_section_enter, for example, this may acquire a global mutex instead of a mutex specific to a particular scheduling enclave. Most functions that take environment arguments, however, cannot accept the GLOBAL_ENVIRONMENT argument, and passing it will result in an assertion violation.
 

Typedefs

typedef struct lf_scheduler_t lf_scheduler_t
 
typedef struct mode_environment_t mode_environment_t
 
typedef struct enclave_info_t enclave_info_t
 
typedef struct watchdog_t watchdog_t
 
typedef struct environment_t environment_t
 Execution environment. This struct contains information about the execution environment. An execution environment maintains a notion of a "current tag" and has its own event queue and scheduler. Normally, there is only one execution environment, but if you use scheduling enclaves, then there will be one for each enclave.
 

Functions

int environment_init (environment_t *env, const char *name, int id, int num_workers, int num_timers, int num_startup_reactions, int num_shutdown_reactions, int num_reset_reactions, int num_is_present_fields, int num_modes, int num_state_resets, int num_watchdogs, const char *trace_file_name)
 Initialize an environment struct with parameters given in the arguments.
 
void environment_free (environment_t *env)
 Free the dynamically allocated memory on the environment struct.
 
void environment_init_tags (environment_t *env, instant_t start_time, interval_t duration)
 Initialize the start and stop tags on the environment struct.
 
int _lf_get_environments (environment_t **envs)
 Will update the argument to point to the beginning of the array of environments in this program.
 

Detailed Description

API for the environment data structure.

Author
Erling R. Jellum

This is an API for creating and destroying environments. An environment is the "context" within which the reactors are executed. The environment contains data structures which are shared among the reactors such as priority queues, the current logical tag, the worker scheduler, and a lot of meta data. Each reactor stores a pointer to its environment on its self-struct. If a LF program has multiple scheduling enclaves, then each enclave will have its own environment.

Macro Definition Documentation

◆ GLOBAL_ENVIRONMENT

#define GLOBAL_ENVIRONMENT   NULL

The global environment. Some operations are not specific to a particular scheduling enclave and therefore have no associated environment. When invoking a function such as lf_critical_section_enter, which requires an environment argument, it may be possible to pass this GLOBAL_ENVIRONMENT. For lf_critical_section_enter, for example, this may acquire a global mutex instead of a mutex specific to a particular scheduling enclave. Most functions that take environment arguments, however, cannot accept the GLOBAL_ENVIRONMENT argument, and passing it will result in an assertion violation.

Typedef Documentation

◆ enclave_info_t

◆ environment_t

typedef struct environment_t environment_t

Execution environment. This struct contains information about the execution environment. An execution environment maintains a notion of a "current tag" and has its own event queue and scheduler. Normally, there is only one execution environment, but if you use scheduling enclaves, then there will be one for each enclave.

◆ lf_scheduler_t

typedef struct lf_scheduler_t lf_scheduler_t

◆ mode_environment_t

◆ watchdog_t

typedef struct watchdog_t watchdog_t

Function Documentation

◆ _lf_get_environments()

int _lf_get_environments ( environment_t ** envs)

Will update the argument to point to the beginning of the array of environments in this program.

Note
Is code-generated by the compiler
Parameters
envsA double pointer which will be dereferenced and modified
Returns
int The number of environments in the array

◆ environment_free()

void environment_free ( environment_t * env)

Free the dynamically allocated memory on the environment struct.

Parameters
envThe environment in which we are executing.

◆ environment_init()

int environment_init ( environment_t * env,
const char * name,
int id,
int num_workers,
int num_timers,
int num_startup_reactions,
int num_shutdown_reactions,
int num_reset_reactions,
int num_is_present_fields,
int num_modes,
int num_state_resets,
int num_watchdogs,
const char * trace_file_name )

Initialize an environment struct with parameters given in the arguments.

◆ environment_init_tags()

void environment_init_tags ( environment_t * env,
instant_t start_time,
interval_t duration )

Initialize the start and stop tags on the environment struct.