Error checking – Comtrol eCos User Manual
Page 482
Chapter 32. µITRON API
of memory is used for that memory pool (memory pool ID number) each time. The requested variable pool size
(pk_cmpl->mplsz) or the number of fixed-size blocks (pk_cmpf->mpfcnt) times the block size (pk_cmpf->blfsz)
are checked for fitting within the statically allocated memory area, so if a create call succeeds, the resulting pool
will be at least as large as that requested. For this reason
del_mpl()
and
del_mpf()
do not in any sense free the
memory that was managed by the deleted pool for use by other pools; it may only be managed by a pool of the
same object id.
For both fixed and variable memory pools, 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.
Error checking
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_MEMPOOLVAR/MEMPOOLFIXED
as appropriate re-
turns 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 a valid pointer, or E_PAR
•
return value pointers in get block routines is a valid pointer, or E_PAR
•
blocksize request in get variable block routines is greater than zero, 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.
•
When create functions
cre_xxx()
are supported, if the object already exists, then E_OBJ
•
In any call which can sleep, such as
get_blk()
: 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
pget_blk()
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_mpl() pk_cmpl-
>
mplatr
must be equal to
TA_TFIFO
else E_RSATR.
•
In
cre_mpf() pk_cmpf-
>
mpfatr
must be equal to
TA_TFIFO
else E_RSATR.
•
In creation functions, the requested size of the memory pool must not be larger than that statically configured
for the pool else E_RSATR; see the configuration option “Option: Static initializers”. In
cre_mpl() pk_cmpl-
>
mplsz
is the field of interest
378