SYSCALL ER sta_cyc(ID cycid) { CYCCB *cyccb; ER ercd; LOG_STA_CYC_ENTER(cycid); CHECK_TSKCTX_UNL(); CHECK_CYCID(cycid); cyccb = get_cyccb(cycid); t_lock_cpu(); if (cyccb->cycsta) { tmevtb_dequeue(&(cyccb->tmevtb)); } else { cyccb->cycsta = TRUE; } tmevtb_enqueue_cyc(cyccb, base_time + cyccb->cycinib->cyctim); ercd = E_OK; t_unlock_cpu(); exit: LOG_STA_CYC_LEAVE(ercd); return(ercd); }
ER ref_cyc(ID cycid, T_RCYC *pk_rcyc) { CYCCB *p_cyccb; ER ercd; LOG_REF_CYC_ENTER(cycid, pk_rcyc); CHECK_TSKCTX_UNL(); CHECK_CYCID(cycid); p_cyccb = get_cyccb(cycid); t_lock_cpu(); if (p_cyccb->p_cycinib->cycatr == TA_NOEXS) { ercd = E_NOEXS; } else { if (p_cyccb->cycsta) { pk_rcyc->cycstat = TCYC_STA; pk_rcyc->lefttim = tmevt_lefttim(&(p_cyccb->tmevtb)); } else { pk_rcyc->cycstat = TCYC_STP; } ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_REF_CYC_LEAVE(ercd, pk_rcyc); return(ercd); }
ER stp_cyc(ID cycid) { CYCCB *p_cyccb; ER ercd; LOG_STP_CYC_ENTER(cycid); CHECK_TSKCTX_UNL(); CHECK_CYCID(cycid); p_cyccb = get_cyccb(cycid); t_lock_cpu(); if (p_cyccb->p_cycinib->cycatr == TA_NOEXS) { ercd = E_NOEXS; } else { if (p_cyccb->cycsta) { p_cyccb->cycsta = false; tmevtb_dequeue(&(p_cyccb->tmevtb)); } ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_STP_CYC_LEAVE(ercd); return(ercd); }
ER sta_cyc(ID cycid) { CYCCB *p_cyccb; ER ercd; LOG_STA_CYC_ENTER(cycid); CHECK_TSKCTX_UNL(); CHECK_CYCID(cycid); p_cyccb = get_cyccb(cycid); t_lock_cpu(); if (p_cyccb->p_cycinib->cycatr == TA_NOEXS) { ercd = E_NOEXS; } else { if (p_cyccb->cycsta) { tmevtb_dequeue(&(p_cyccb->tmevtb)); } else { p_cyccb->cycsta = true; } tmevtb_enqueue_cyc(p_cyccb, base_time + p_cyccb->p_cycinib->cycphs); ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_STA_CYC_LEAVE(ercd); return(ercd); }
SYSCALL ER stp_cyc(ID cycid) { CYCCB *cyccb; ER ercd; LOG_STP_CYC_ENTER(cycid); CHECK_TSKCTX_UNL(); CHECK_CYCID(cycid); cyccb = get_cyccb(cycid); t_lock_cpu(); if (cyccb->cycsta) { cyccb->cycsta = FALSE; tmevtb_dequeue(&(cyccb->tmevtb)); } ercd = E_OK; t_unlock_cpu(); exit: LOG_STP_CYC_LEAVE(ercd); return(ercd); }
ER del_cyc(ID cycid) { CYCCB *p_cyccb; CYCINIB *p_cycinib; ER ercd; LOG_DEL_CYC_ENTER(cycid); CHECK_TSKCTX_UNL(); CHECK_CYCID(cycid); p_cyccb = get_cyccb(cycid); t_lock_cpu(); if (p_cyccb->p_cycinib->cycatr == TA_NOEXS) { ercd = E_NOEXS; } else if (CYCID(p_cyccb) > tmax_scycid) { if (p_cyccb->cycsta) { p_cyccb->cycsta = false; tmevtb_dequeue(&(p_cyccb->tmevtb)); } p_cycinib = (CYCINIB *)(p_cyccb->p_cycinib); p_cycinib->cycatr = TA_NOEXS; queue_insert_prev(&free_cyccb, ((QUEUE *) &(p_cyccb->tmevtb))); ercd = E_OK; } else { ercd = E_OBJ; } t_unlock_cpu(); error_exit: LOG_DEL_CYC_LEAVE(ercd); return(ercd); }