|
ssm
Runtime Library for the Sparse Synchronous Model
|
#include <stdint.h>#include <stdbool.h>#include <stdlib.h>#include <assert.h>#include <stddef.h>#include "ssm-debug.h"

Go to the source code of this file.
Data Structures | |
| struct | ssm_act |
| Activation record for an SSM routine. More... | |
| struct | ssm_trigger |
| Indicates a routine should run when a scheduled variable is written. More... | |
| struct | ssm_sv |
| A variable that may have scheduled updates and triggers. More... | |
| struct | ssm_bool_t |
| Scheduled Boolean variable. More... | |
| struct | ssm_i8_t |
| Scheduled 8-bit Signed Integer variable. More... | |
| struct | ssm_i16_t |
| Scheduled 16-bit Signed Integer variable. More... | |
| struct | ssm_i32_t |
| Scheduled 32-bit Signed Integer variable. More... | |
| struct | ssm_i64_t |
| Scheduled 64-bit Signed Integer variable. More... | |
| struct | ssm_u8_t |
| Scheduled 8-bit Unsigned Integer variable. More... | |
| struct | ssm_u16_t |
| Scheduled 16-bit Unsigned Integer variable. More... | |
| struct | ssm_u32_t |
| Scheduled 32-bit Unsigned Integer variable. More... | |
| struct | ssm_u64_t |
| Scheduled 64-bit Unsigned Integer variable. More... | |
Macros | |
| #define | SSM_ACT_MALLOC(size) malloc(size) |
| Allocation function for activation records. More... | |
| #define | SSM_ACT_FREE(ptr, size) free(ptr) |
| Free function for activation records. More... | |
| #define | SSM_RESOURCES_EXHAUSTED(string) exit(1) |
| Invoked when limited resources are exhausted, e.g., unable to allocate memory, no more queue space. More... | |
| #define | SSM_SECOND 1000000000L |
| Ticks in a second. More... | |
| #define | SSM_NANOSECOND (SSM_SECOND/1000000000L) |
| Ticks per nanosecond. More... | |
| #define | SSM_MICROSECOND (SSM_SECOND/1000000L) |
| Ticks per microsecond. More... | |
| #define | SSM_MILLISECOND (SSM_SECOND/1000L) |
| Ticks per millisecond. More... | |
| #define | SSM_MINUTE (SSM_SECOND*60L) |
| Ticks per minute. More... | |
| #define | SSM_HOUR (SSM_SECOND*3600L) |
| Ticks per hour. More... | |
| #define | SSM_NEVER UINT64_MAX |
| Time indicating something will never happen. More... | |
| #define | SSM_ROOT_PRIORITY 0 |
| The priority for the entry point of an SSM program. More... | |
| #define | SSM_ROOT_DEPTH (sizeof(ssm_priority_t) * 8) |
| The depth at the entry point of an SSM program. More... | |
| #define | SSM_ACT_FIELDS |
| "Base class" fields for user-defined activation records More... | |
| #define | member_type(type, member) const void |
| Implementation of container_of that falls back to ISO C99 when GNU C is not available (from https://stackoverflow.com/a/10269925/10497710) More... | |
| #define | container_of(ptr, type, member) |
| #define | ssm_later_event(var, then) ssm_schedule((var), (then)) |
| #define | SSM_DECLARE_SV_SCALAR(payload_t) |
| #define | SSM_DEFINE_SV_SCALAR(payload_t) |
Typedefs | |
| typedef uint64_t | ssm_time_t |
| Absolute time; never to overflow. More... | |
| typedef uint32_t | ssm_priority_t |
| Thread priority. More... | |
| typedef uint8_t | ssm_depth_t |
| Index of least significant bit in a group of priorities. More... | |
| typedef void | ssm_stepf_t(struct ssm_act *) |
| The function that does an instant's work for a routine. More... | |
| typedef struct ssm_act | ssm_act_t |
| Activation record for an SSM routine. More... | |
| typedef struct ssm_trigger | ssm_trigger_t |
| Indicates a routine should run when a scheduled variable is written. More... | |
| typedef struct ssm_sv | ssm_sv_t |
| A variable that may have scheduled updates and triggers. More... | |
| typedef ssm_sv_t | ssm_event_t |
| typedef int8_t | i8 |
| 8-bit Signed Integer More... | |
| typedef int16_t | i16 |
| 16-bit Signed Integer More... | |
| typedef int32_t | i32 |
| 32-bit Signed Integer More... | |
| typedef int64_t | i64 |
| 64-bit Signed Integer More... | |
| typedef uint8_t | u8 |
| 8-bit Unsigned Integer More... | |
| typedef uint16_t | u16 |
| 16-bit Unsigned Integer More... | |
| typedef uint32_t | u32 |
| 32-bit Unsigned Integer More... | |
| typedef uint64_t | u64 |
| 64-bit Unsigned Integer More... | |
Functions | |
| void | ssm_sensitize (ssm_sv_t *, ssm_trigger_t *) |
| Indicate writing to a variable should trigger a routine. More... | |
| void | ssm_desensitize (ssm_trigger_t *) |
| Disable a sensitized routine. More... | |
| void | ssm_activate (ssm_act_t *) |
| Schedule a routine to run in the current instant. More... | |
| static void | ssm_call (ssm_act_t *act) |
| Execute a routine immediately. More... | |
| static ssm_act_t * | ssm_enter (size_t bytes, ssm_stepf_t *step, ssm_act_t *parent, ssm_priority_t priority, ssm_depth_t depth) |
| Enter a routine. More... | |
| static void | ssm_leave (ssm_act_t *act, size_t bytes) |
| Deallocate an activation record; return to caller if we were the last child. More... | |
| bool | ssm_event_on (ssm_sv_t *var) |
| Return true if there is an event on the given variable in the current instant. More... | |
| void | ssm_initialize (ssm_sv_t *var, void(*update)(ssm_sv_t *)) |
| Initialize a scheduled variable. More... | |
| void | ssm_schedule (ssm_sv_t *var, ssm_time_t later) |
| Schedule a future update to a variable. More... | |
| void | ssm_unschedule (ssm_sv_t *var) |
| Unschedule any pending event on a variable. More... | |
| void | ssm_trigger (ssm_sv_t *var, ssm_priority_t priority) |
| Activate routines triggered by a variable. More... | |
| ssm_time_t | ssm_next_event_time (void) |
| Return the time of the next event in the queue or SSM_NEVER. More... | |
| ssm_time_t | ssm_now (void) |
| Return the current model time. More... | |
| void | ssm_tick () |
| Run the system for the next scheduled instant. More... | |
| void | ssm_reset () |
| Reset the scheduler. More... | |
| void | ssm_assign_event (ssm_event_t *var, ssm_priority_t prio) |
| void | ssm_initialize_event (ssm_event_t *) |
| void | ssm_assign_bool (ssm_bool_t *sv, ssm_priority_t prio, const bool value) |
| void | ssm_later_bool (ssm_bool_t *sv, ssm_time_t then, const bool value) |
| void | ssm_initialize_bool (ssm_bool_t *v) |
| void | ssm_assign_i8 (ssm_i8_t *sv, ssm_priority_t prio, const i8 value) |
| void | ssm_later_i8 (ssm_i8_t *sv, ssm_time_t then, const i8 value) |
| void | ssm_initialize_i8 (ssm_i8_t *v) |
| void | ssm_assign_i16 (ssm_i16_t *sv, ssm_priority_t prio, const i16 value) |
| void | ssm_later_i16 (ssm_i16_t *sv, ssm_time_t then, const i16 value) |
| void | ssm_initialize_i16 (ssm_i16_t *v) |
| void | ssm_assign_i32 (ssm_i32_t *sv, ssm_priority_t prio, const i32 value) |
| void | ssm_later_i32 (ssm_i32_t *sv, ssm_time_t then, const i32 value) |
| void | ssm_initialize_i32 (ssm_i32_t *v) |
| void | ssm_assign_i64 (ssm_i64_t *sv, ssm_priority_t prio, const i64 value) |
| void | ssm_later_i64 (ssm_i64_t *sv, ssm_time_t then, const i64 value) |
| void | ssm_initialize_i64 (ssm_i64_t *v) |
| void | ssm_assign_u8 (ssm_u8_t *sv, ssm_priority_t prio, const u8 value) |
| void | ssm_later_u8 (ssm_u8_t *sv, ssm_time_t then, const u8 value) |
| void | ssm_initialize_u8 (ssm_u8_t *v) |
| void | ssm_assign_u16 (ssm_u16_t *sv, ssm_priority_t prio, const u16 value) |
| void | ssm_later_u16 (ssm_u16_t *sv, ssm_time_t then, const u16 value) |
| void | ssm_initialize_u16 (ssm_u16_t *v) |
| void | ssm_assign_u32 (ssm_u32_t *sv, ssm_priority_t prio, const u32 value) |
| void | ssm_later_u32 (ssm_u32_t *sv, ssm_time_t then, const u32 value) |
| void | ssm_initialize_u32 (ssm_u32_t *v) |
| void | ssm_assign_u64 (ssm_u64_t *sv, ssm_priority_t prio, const u64 value) |
| void | ssm_later_u64 (ssm_u64_t *sv, ssm_time_t then, const u64 value) |
| void | ssm_initialize_u64 (ssm_u64_t *v) |
Variables | |
| ssm_act_t | ssm_top_parent |
| An activation record for the parent of the topmost routine. More... | |
1.8.13