コード例 #1
0
ファイル: nrk_task.cpp プロジェクト: ESE519/EVM-2013
int8_t nrk_wait_until_ticks (uint16_t ticks)
{
    uint8_t timer;
    nrk_int_disable ();
    nrk_cur_task_TCB->suspend_flag = 1;
    nrk_cur_task_TCB->next_wakeup = ticks;
    // printf( "t %u\r\n",ticks );
    timer = _nrk_os_timer_get ();

    if (timer < MAX_SCHED_WAKEUP_TIME - TIME_PAD)
        if ((timer + TIME_PAD) <= _nrk_get_next_wakeup ())
        {
            timer += TIME_PAD;
            _nrk_prev_timer_val = timer;
            _nrk_set_next_wakeup (timer);
        }
//else nrk_cur_task_TCB->next_wakeup=ticks+1;
    nrk_int_enable ();
//while(nrk_cur_task_TCB->suspend_flag==1);
    _nrk_wait_for_scheduler ();
    return NRK_OK;
}
コード例 #2
0
ファイル: nrk_task.c プロジェクト: mlab-upenn/ecgpatch
int8_t nrk_wait_until_next_period ()
{
  uint8_t timer;

  nrk_stack_check ();
// Next Period Wakeup Time is Set inside scheduler when a task becomes Runnable 
  nrk_int_disable ();
  nrk_cur_task_TCB->num_periods = 1;
  nrk_cur_task_TCB->suspend_flag = 1;
  timer = _nrk_os_timer_get ();

//nrk_cur_task_TCB->cpu_remaining=_nrk_prev_timer_val+1;

  if (timer < (MAX_SCHED_WAKEUP_TIME - TIME_PAD))
    if ((timer + TIME_PAD) <= _nrk_get_next_wakeup ()) {
      timer += TIME_PAD;
      _nrk_prev_timer_val = timer;
      _nrk_set_next_wakeup (timer);
    }

  nrk_int_enable ();
  _nrk_wait_for_scheduler ();
  return NRK_OK;
}