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; }
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; }