void call_cychdr(CYCCB *p_cyccb) { PRI saved_ipm; /* * 次回の起動のためのタイムイベントブロックを登録する. * * 同じタイムティックで周期ハンドラを再度起動すべき場合には,この * 関数からsignal_timeに戻った後に,再度この関数が呼ばれることにな * る. */ tmevtb_enqueue_cyc(p_cyccb, p_cyccb->evttim + p_cyccb->p_cycinib->cyctim); /* * 周期ハンドラを,CPUロック解除状態で呼び出す. */ saved_ipm = i_get_ipm(); i_unlock_cpu(); LOG_CYC_ENTER(p_cyccb); (*((CYCHDR)(p_cyccb->p_cycinib->cychdr)))(p_cyccb->p_cycinib->exinf); LOG_CYC_LEAVE(p_cyccb); if (!i_sense_lock()) { i_lock_cpu(); } i_set_ipm(saved_ipm); }
void call_cychdr(uintptr_t cycidx) { cyccb_evttim[cycidx] += cycinib_cyctim[cycidx]; /* 次周期のタイムイベントを登録 */ time_event_enqueue((ID)cycidx , cyccb_evttim[cycidx] , call_cychdr , cycidx); i_unlock_cpu(); /* 周期ハンドラを実行 */ LOG_CYC_ENTER(cycidx); (*cycinib_cychdr[cycidx])(cycinib_exinf[cycidx]); LOG_CYC_LEAVE(cycidx); if (!i_sense_lock()) { i_lock_cpu(); } }
void call_cychdr(CYCCB *cyccb) { /* * 次回の起動のためのタイムイベントブロックを登録する. * * 同じタイムティックで周期ハンドラを再度起動すべき場合には, * この関数から isig_tim に戻った後に,再度この関数が呼ばれる * ことになる. */ tmevtb_enqueue_cyc(cyccb, cyccb->evttim + cyccb->cycinib->cyctim); /* * 周期ハンドラを,CPUロック解除状態で呼び出す. */ i_unlock_cpu(); LOG_CYC_ENTER(cyccb); (*((CYCHDR)(cyccb->cycinib->cychdr)))(cyccb->cycinib->exinf); LOG_CYC_LEAVE(cyccb); i_lock_cpu(); }