void call_ovrhdr(void) { PRI saved_ipm; assert(sense_context()); assert(!i_sense_lock()); assert(ovrinib.ovrhdr != NULL); p_runtsk->leftotm = 0U; saved_ipm = i_get_ipm(); LOG_OVR_ENTER(p_runtsk); (*((OVRHDR)(ovrinib.ovrhdr)))(TSKID(p_runtsk), p_runtsk->p_tinib->exinf); LOG_OVR_LEAVE(p_runtsk); if (i_sense_lock()) { i_unlock_cpu(); } i_set_ipm(saved_ipm); }
void call_ovrhdr(void) { assert(sense_context()); assert(!i_sense_lock()); assert(ovrinib.ovrhdr != NULL); i_lock_cpu(); if (p_runtsk!= NULL && p_runtsk->leftotm == 1U) { p_runtsk->leftotm = 0U; i_unlock_cpu(); LOG_OVR_ENTER(p_runtsk); ((OVRHDR)(ovrinib.ovrhdr))(TSKID(p_runtsk), p_runtsk->p_tinib->exinf); LOG_OVR_LEAVE(p_runtsk); } else { /* * このルーチンが呼び出される前に,オーバランハンドラの起動が * キャンセルされた場合 */ i_unlock_cpu(); } }