Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}