void wait_tmout_ok(TCB *p_tcb) { p_tcb->p_winfo->wercd = E_OK; make_non_wait(p_tcb); if (p_runtsk != p_schedtsk) { request_dispatch_retint(); } /* * ここで優先度の高い割込みを受け付ける. */ unlock_cpu(); delay_for_interrupt(); lock_cpu(); }
void wait_tmout(TCB *p_tcb) { wait_dequeue_wobj(p_tcb); p_tcb->p_winfo->wercd = E_TMOUT; make_non_wait(p_tcb); if (p_runtsk != p_schedtsk) { request_dispatch(); } /* * ここで優先度の高い割込みを受け付ける. */ unlock_cpu(); delay_for_interrupt(); lock_cpu(); }
/* * シミュレーション時刻を進める(テストプログラム用) */ void simtim_advance(uint_t time) { bool_t locked; locked = sns_loc(); if (!locked) { loc_cpu(); } while (*p_event_flag && *p_event_simtim <= current_simtim + time) { /* * 時刻をtime進めると,高分解能タイマ割込みの発生時刻を過ぎ * る場合 */ if (current_simtim < *p_event_simtim) { time -= (*p_event_simtim - current_simtim); current_simtim = *p_event_simtim; } *p_event_flag = false; (*p_raise_event)(); select_event(); /* * ここで割込みを受け付ける. */ if (!locked) { unl_cpu(); delay_for_interrupt(); loc_cpu(); } } current_simtim += time; if (!locked) { unl_cpu(); } }