/*! * Create new alarm * \param alarm Alarm parameters * \return status (0 for success), but also in 'param->alarm_id' is pointer to * newly created alarm (handler) */ int sys__alarm_new ( void **id, alarm_t *alarm ) { int retval; ASSERT_ERRNO_AND_EXIT ( id && alarm, E_INVALID_HANDLE ); disable_interrupts (); retval = k_alarm_new ( id, alarm ); enable_interrupts (); return retval; }
/*! * Create new alarm * \param alarm Alarm parameters * \returns status (0 for success), but also in 'param->alarm_id' is pointer to * newly created alarm (handler) */ int sys__alarm_new ( void *p ) { void **id; alarm_t *alarm; id = *( (void **) p ); p += sizeof ( void *); alarm = *( (void **) p ); ASSERT_ERRNO_AND_EXIT ( id && alarm, E_INVALID_HANDLE ); return k_alarm_new ( id, alarm ); }
static int edf_arm_deadline ( kthread_t *kthread ) { kthread_sched_data_t *tsched = kthread_get_sched_param ( kthread ); alarm_t alarm; alarm.action = edf_deadline_timer; alarm.param = kthread; alarm.flags = 0; alarm.period.sec = alarm.period.nsec = 0; alarm.exp_time.sec = alarm.exp_time.nsec = 0; return k_alarm_new ( &tsched->params.edf.edf_deadline_alarm, &alarm, KERNELCALL ); }
static int edf_arm_period ( kthread_t *kthread ) { kthread_sched_data_t *tsched = kthread_get_sched_param ( kthread ); alarm_t alarm; alarm.action = edf_period_timer; alarm.param = kthread; alarm.flags = ALARM_PERIODIC; alarm.period = tsched->params.edf.period; alarm.exp_time = tsched->params.edf.next_run; return k_alarm_new ( &tsched->params.edf.edf_period_alarm, &alarm, KERNELCALL ); }
//int sys__alarm_new ( alarm_t *alarm ) int sys__alarm_new ( void *p ) { void **id; alarm_t *alarm; id = *( (void **) p ); p += sizeof ( void *); alarm = *( (void **) p ); ASSERT_ERRNO_AND_EXIT ( id && alarm, E_INVALID_HANDLE ); id = U2K_GET_ADR ( id, k_get_active_process() ); alarm = U2K_GET_ADR ( alarm, k_get_active_process() ); ASSERT_ERRNO_AND_EXIT ( id && alarm, E_INVALID_HANDLE ); return k_alarm_new ( id, alarm ); }
/*! Init RR scheduler */ static int rr_init ( ksched_t *self ) { *self = ksched_rr; /* reserve an empty alarm */ self->params.rr.alarm.exp_time.sec = 0; self->params.rr.alarm.exp_time.nsec = 0; self->params.rr.alarm.period.sec = 0; self->params.rr.alarm.period.nsec = 0; self->params.rr.alarm.action = rr_timer; self->params.rr.alarm.param = NULL; self->params.rr.alarm.flags = 0; k_alarm_new ( &self->params.rr.rr_alarm, &self->params.rr.alarm, KERNELCALL ); return 0; }