Synchronization and Communication Functions

These functions are fully supported in this release:

ER sig_sem( 
    ID semid )
ER wai_sem( 
    ID semid )
ER preq_sem( 
    ID semid )
ER twai_sem( 
    ID semid,    TMO tmout )
ER ref_sem( 
    T_RSEM *pk_rsem ,    ID semid )
ER set_flg( 
    ID flgid,    UINT setptn )
ER clr_flg( 
    ID flgid,    UINT clrptn )
ER wai_flg( 
    UINT *p_flgptn,    ID flgid ,
    UINT waiptn ,    UINT wfmode )
ER pol_flg( 
    UINT *p_flgptn,    ID flgid ,
    UINT waiptn ,    UINT wfmode )
ER twai_flg( 
    UINT *p_flgptn    ID flgid ,
    UINT waiptn ,    UINT wfmode,    TMO tmout )
ER ref_flg( 
    T_RFLG *pk_rflg,    ID flgid )
ER snd_msg( 
    ID mbxid,    T_MSG *pk_msg )
ER rcv_msg( 
    T_MSG **ppk_msg,    ID mbxid )
ER prcv_msg( 
    T_MSG **ppk_msg,    ID mbxid )
ER trcv_msg( 
    T_MSG **ppk_msg,    ID mbxid ,    TMO tmout )
ER ref_mbx( 
    T_RMBX *pk_rmbx,    ID mbxid )

The following functions are supported in this release (with some restrictions) if enabled with the appropriate configuration option for the object type (for example CYGPKG_UITRON_SEMAS_CREATE_DELETE):

ER cre_sem( 
    ID semid,    T_CSEM *pk_csem )
ER del_sem( 
    ID semid )
ER cre_flg( 
    ID flgid,    T_CFLG *pk_cflg )
ER del_flg( 
    ID flgid )
ER cre_mbx( 
    ID mbxid,    T_CMBX *pk_cmbx )
ER del_mbx( 
    ID mbxid )

In general the queueing order when waiting on a synchronization object depends on the underlying kernel configuration. The multi-level queue scheduler is required for strict µITRON conformance and it queues tasks in FIFO order, so requests to create an object with priority queueing of tasks (pk_cxxx->xxxatr = TA_TPRI) are rejected with E_RSATR. Additional undefined bits in the attributes fields must be zero.

In general, extended information (pk_cxxx->exinf) is ignored.

For semaphores, the initial semaphore count (pk_csem->isemcnt) is supported; the new semaphore's count is set. The maximum count is not supported, and is not in fact defined in type pk_csem.

For flags, multiple tasks are allowed to wait. Because single task waiting is a subset of this, the W bit (TA_WMUL) of the flag attributes is ignored; all other bits must be zero. The initial flag value is supported.

For mailboxes, the buffer count is defined statically by kernel configuration option CYGNUM_KERNEL_SYNCH_MBOX_QUEUE_SIZE; therefore the buffer count field is not supported and is not in fact defined in type pk_cmbx. Queueing of messages is FIFO ordered only, so TA_MPRI (in pk_cmbx->mbxatr) is not supported.

Error checking

The following conditions are only checked for, and only return errors if CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS is enabled:

The following conditions are checked for, and can return error codes, regardless of the setting of CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS :