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.
The following conditions are only checked for, and only return
errors if
CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
is enabled:
invalid object id; less than 1 or greater than
CYGNUM_UITRON_TASKS/SEMAS/MBOXES
as appropriate returns E_ID
dispatching is enabled in any call which can sleep, or
E_CTX
tmout must be positive, otherwise E_PAR
pk_cxxx pointers in
cre_xxx()
must be valid pointers, or E_PAR
return value pointer in
ref_xxx()
is valid pointer, or E_PAR
flag wait pattern must be non-zero, and mode must be valid,
or E_PAR
return value pointer in flag wait calls is a valid pointer,
or E_PAR
The following conditions are checked for, and can return error
codes, regardless of the setting of
CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
:
When create and delete functions
cre_xxx()
and
del_xxx()
are supported, all calls which use a valid object ID number check
that the object exists. If not, E_NOEXS is returned.
In create functions
cre_xxx()
, when supported, if the object already exists, then E_OBJ
In any call which can sleep, such as
twai_sem()
: return codes E_TMOUT, E_RLWAI, E_DLT
or of course E_OK are returned depending on the reason
for terminating the sleep
In polling functions such as
preq_sem()
return codes E_TMOUT or E_OK are returned depending
on the state of the synchronization object
In creation functions, the attributes must be compatible
with the selected underlying kernel configuration: in
cre_sem()pk_csem->sematr
must be equal to
TA_TFIFO
else E_RSATR.
In
cre_flg()pk_cflg->flgatr
must be either
TA_WMUL
or
TA_WSGL
else E_RSATR.
In
cre_mbx()pk_cmbx->mbxatr
must be
TA_TFIFO + TA_MFIFO
else E_RSATR.