trcv_mbf

Outline

Receive from message buffer (with time-out).

C format

 ER_UINT  trcv_mbf (ID mbfid, VP msg, TMO tmout);
Parameter(s)

I/O

Parameter

Description

I

 ID      mbfid;
ID number of the message buffer.

O

 VP      msg;
Pointer to store the message.

I

 TMO     tmout;
Specified time-out (in millisecond).

TMO_FEVR: Waiting forever.

TMO_POL: Polling.

Value: Specified time-out.



Explanation

This service call processes as follows according to the situation of the message buffer specified by the parameter mbfid.

- There is a message in the message buffer.
This service call takes out the oldest message from the message buffer and stores the message to the area specified by msg and return the size of the message. As a result, the size of available space in the target message buffer increases by the amount calculated by the following expression.


The amount of increase = up4( Return value ) + VTSZ_MBFTBL

In addition, this service call repeats the following processing until task in the transmission wait queue is lost or it becomes impossible to store the message in the message buffer.

- When there is a task in the transmission wait queue and there is available space in the message buffer for the message specified by the task in the top of the transmission wait queue, the task is unlinked from the transmission wait queue and moves from the WAITING state (message transmission wait state) to the READY state, or from the WAITING-SUSPENDED state to the SUSPENDED state. As a result, the size of available space in the target message buffer decreases by the amount calculated by the following expression.

The amount of decrease =up4( The message size sent by the task ) + VTSZ_MBFTBL

- There is no message in the message buffer and there is a task in the transmission wait queue.
This service call stores the message specified by the task in the top of the transmission wait queue to the area pointed by the parameter msg. As a result, the task is unlinked from the transmission wait queue and moves from the WAITING state (message transmission wait state) to the READY state, or from the WAITING-SUSPENDED state to the SUSPENDED state.
Note, this situation is caused only when the size of the message buffer is 0.



- There is no message in the message buffer and there is no task in the transmission wait queue.
This service call queues the invoking task to the reception wait queue of the target message buffer and moves it from the RUNNING state to the WAITING state with time (message reception wait state).
The receiving WAITING state for a message buffer is cancelled in the following cases.



Receiving WAITING State for a Message Buffer Cancel Operation

Return Value

Message was sent to the message buffer area as a result of issuing snd_mbf.

E_OK

Message was sent to the message buffer area as a result of issuing psnd_mbf.

E_OK

Message was sent to the message buffer area as a result of issuing ipsnd_mbf.

E_OK

Message was sent to the message buffer area as a result of issuing tsnd_mbf.

E_OK

Forced release from waiting (accept rel_wai while waiting).

E_RLWAI

Forced release from waiting (accept irel_wai while waiting).

E_RLWAI

The time specified by tmout has elapsed.

E_TMOUT



Note 1 The Maximum message size (max_msgsz) is defined during configuration. The size of the area pointed by msg must be larger than or equal to the maximum message size.

Note 2 Invoking tasks are queued to the reception wait queue of the target message buffer in the order of the message reception request.

Note 3 TMO_FEVR is specified for wait time tmout, processing equivalent to rcv_mbf will be executed. When TMO_POL is specified, processing equivalent to prcv_mbf will be executed.

Return value

Macro

Value

Description

E_PAR

-17

Parameter error.

- tmout < -1

- tmout > (0x7FFFFFFF - TIC_NUME) / TIC_DENO

E_ID

-18

Invalid ID number.

- mbfid < 0

- mbfid > VTMAX_MBF

E_CTX

-25

Context error.

- This service call was issued from a non-task.

- This service call was issued in the CPU locked state.

- This service call was issued in the dispatching disabled state.

- This service call was issued in the status "PSW.IPL > kernel interrupt mask level".

E_RLWAI

-49

Forced release from the WAITING state.

- Accept rel_wai/irel_wai while waiting.

E_TMOUT

-50

Polling failure or specified time has elapsed.

-

Positive value

Normal completion (the size of the received message).