static void event(void) { #if MQX_USE_EVENTS IF_TINIEST(pointer handle=0); IF_TINIEST(_mqx_uint value=0); IF_SMALL(_event_create_component(1, 1, 1)); IF_SMALL(_event_create_fast(1)); IF_SMALL(_event_create_fast_auto_clear(1)); IF_SMALL(_event_open("e", &handle)); IF_SMALL(_event_set(handle, 0)); IF_SMALL(_event_clear(handle, 0)); IF_SMALL(_event_wait_all(handle, 0, 0)); IF_TYPICAL(_event_close(handle)); IF_TYPICAL(_event_create("e")); IF_MAX(_event_create_auto_clear("e")); IF_TYPICAL(_event_destroy("e")); IF_MAX(_event_destroy_fast(1)); IF_MAX(_event_get_value(handle, &value)); IF_MAX(_event_get_wait_count(handle)); IF_MAX(_event_open_fast(1, &handle)); IF_MAX(_event_test(&handle)); IF_MAX(_event_wait_all_for(handle, 0, NULL)); IF_TYPICAL(_event_wait_all_ticks(handle, 0, 0)); IF_MAX(_event_wait_all_until(handle, 0, NULL)); IF_MAX(_event_wait_any(handle, 0, 0)); IF_MAX(_event_wait_any_for(handle, 0, NULL)); IF_TYPICAL(_event_wait_any_ticks(handle, 0, 0)); IF_MAX(_event_wait_any_until(handle, 0, NULL)); #endif }
// -----[ _fifo_event_destroy ]-------------------------------------- static void _fifo_event_destroy(void ** item_ref) { _event_t ** event_ref= (_event_t **) item_ref; _event_t * event= *event_ref; if (event == NULL) return; if ((event->ops != NULL) && (event->ops->destroy != NULL)) event->ops->destroy(event->ctx); _event_destroy(event_ref); }
/** * Process the events in the global linear queue. * * Arguments: * - iNumSteps: number of events to process during this run (if -1, * process events until queue is empty). */ static net_error_t _run(sched_t * self, unsigned int num_steps) { sched_static_t * sched= (sched_static_t *) self; _event_t * event; net_error_t error; sched->cancelled= 0; while ((!sched->cancelled) && ((event= (_event_t *) fifo_pop(sched->events)) != NULL)) { STREAM_DEBUG(STREAM_LEVEL_DEBUG, "=====<<< EVENT %2.2f >>>=====\n", (double) sched->cur_time); error= event->ops->callback(sched->sim, event->ctx); _event_destroy(&event); if (error != ESUCCESS) return error; STREAM_DEBUG(STREAM_LEVEL_DEBUG, "\n"); // Update simulation time sched->cur_time++; // Limit on simulation time ?? if ((sched->sim->max_time > 0) && (sched->cur_time >= sched->sim->max_time)) return ESIM_TIME_LIMIT; // Limit on number of steps if (num_steps > 0) { num_steps--; if (num_steps == 0) break; } _log_progress(sched); } return ESUCCESS; }