Mail boxes, Name, Synopsis – Comtrol eCos User Manual

Page 77: Description

Advertising
background image

Mail boxes

Name

cyg_mbox_create, cyg_mbox_delete, cyg_mbox_get, cyg_mbox_timed_get,

cyg_mbox_tryget, cyg_mbox_peek_item, cyg_mbox_put, cyg_mbox_timed_put,

cyg_mbox_tryput, cyg_mbox_peek, cyg_mbox_waiting_to_get,

cyg_mbox_waiting_to_put

— Synchronization primitive

Synopsis

#include

<

cyg/kernel/kapi.h

>

void cyg_mbox_create(cyg_handle_t* handle, cyg_mbox* mbox);

void cyg_mbox_delete(cyg_handle_t mbox);

void* cyg_mbox_get(cyg_handle_t mbox);

void* cyg_mbox_timed_get(cyg_handle_t mbox, cyg_tick_count_t abstime);

void* cyg_mbox_tryget(cyg_handle_t mbox);

cyg_count32 cyg_mbox_peek(cyg_handle_t mbox);

void* cyg_mbox_peek_item(cyg_handle_t mbox);

cyg_bool_t cyg_mbox_put(cyg_handle_t mbox, void* item);

cyg_bool_t cyg_mbox_timed_put(cyg_handle_t mbox, void* item, cyg_tick_count_t abstime);

cyg_bool_t cyg_mbox_tryput(cyg_handle_t mbox, void* item);

cyg_bool_t cyg_mbox_waiting_to_get(cyg_handle_t mbox);

cyg_bool_t cyg_mbox_waiting_to_put(cyg_handle_t mbox);

Description

Mail boxes are a synchronization primitive. Like semaphores they can be used by a consumer thread to wait until a
certain event has occurred, but the producer also has the ability to transmit some data along with each event. This
data, the message, is normally a pointer to some data structure. It is stored in the mail box itself, so the producer
thread that generates the event and provides the data usually does not have to block until some consumer thread
is ready to receive the event. However a mail box will only have a finite capacity, typically ten slots. Even if the
system is balanced and events are typically consumed at least as fast as they are generated, a burst of events can
cause the mail box to fill up and the generating thread will block until space is available again. This behaviour is
very different from semaphores, where it is only necessary to maintain a counter and hence an overflow is unlikely.

Before a mail box can be used it must be created with a call to

cyg_mbox_create

. Each mail box has a unique

handle which will be returned via the first argument and which should be used for subsequent operations.

cyg_mbox_create

also requires an area of memory for the kernel structure, which is provided by the cyg_mbox

second argument. If a mail box is no longer required then

cyg_mbox_delete

can be used. This will simply

discard any messages that remain posted.

The main function for waiting on a mail box is

cyg_mbox_get

. If there is a pending message because of a call

to

cyg_mbox_put

then

cyg_mbox_get

will return immediately with the message that was put into the mail box.

Otherwise this function will block until there is a put operation. Exceptionally the thread can instead be unblocked
by a call to

cyg_thread_release

, in which case

cyg_mbox_get

will return a null pointer. It is assumed that there

77

Advertising