ER ref_ovr(ID tskid, T_ROVR *pk_rovr) { TCB *p_tcb; ER ercd; LOG_REF_OVR_ENTER(tskid, pk_rovr); CHECK_TSKCTX_UNL(); CHECK_OBJ(ovrinib.ovrhdr != NULL); CHECK_TSKID_SELF(tskid); p_tcb = get_tcb_self(tskid); t_lock_cpu(); if (p_tcb->leftotm > 0U) { pk_rovr->ovrstat = TOVR_STA; if (p_tcb == p_runtsk) { pk_rovr->leftotm = target_ovrtimer_get_current(); } else { pk_rovr->leftotm = p_tcb->leftotm; } } else { pk_rovr->ovrstat = TOVR_STP; } ercd = E_OK; t_unlock_cpu(); error_exit: LOG_REF_OVR_LEAVE(ercd, pk_rovr); return(ercd); }
ER ref_ovr(ID tskid, T_ROVR *pk_rovr) { TCB *p_tcb; ER ercd; LOG_REF_OVR_ENTER(tskid, pk_rovr); CHECK_TSKCTX_UNL(); CHECK_OBJ(ovrinib.ovrhdr != NULL); CHECK_TSKID_SELF(tskid); CHECK_MACV_WRITE(pk_rovr, T_ROVR); p_tcb = get_tcb_self(tskid); t_lock_cpu(); if (p_tcb->p_tinib->tskatr == TA_NOEXS) { ercd = E_NOEXS; } else if (VIOLATE_ACPTN(p_tcb->p_tinib->acvct.acptn4)) { ercd = E_OACV; } else { if (p_tcb->leftotm > 0U) { pk_rovr->ovrstat = TOVR_STA; if (p_tcb == p_runtsk) { pk_rovr->leftotm = target_ovrtimer_get_current(); } else { pk_rovr->leftotm = p_tcb->leftotm; } } else { pk_rovr->ovrstat = TOVR_STP; } ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_REF_OVR_LEAVE(ercd, pk_rovr); return(ercd); }