CMSIS-RTOS2
Version 2.1.0
Real-Time Operating System: API and RTX Reference Implementation
|
Exchange messages between threads in a FIFO-like operation. More...
Data Structures | |
struct | osMessageQueueAttr_t |
Attributes structure for message queue. More... | |
Functions | |
osMessageQueueId_t | osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr) |
Create and Initialize a Message Queue object. More... | |
const char * | osMessageQueueGetName (osMessageQueueId_t mq_id) |
Get name of a Message Queue object. More... | |
osStatus_t | osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout) |
Put a Message into a Queue or timeout if Queue is full. More... | |
osStatus_t | osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout) |
Get a Message from a Queue or timeout if Queue is empty. More... | |
uint32_t | osMessageQueueGetCapacity (osMessageQueueId_t mq_id) |
Get maximum number of messages in a Message Queue. More... | |
uint32_t | osMessageQueueGetMsgSize (osMessageQueueId_t mq_id) |
Get maximum message size in a Memory Pool. More... | |
uint32_t | osMessageQueueGetCount (osMessageQueueId_t mq_id) |
Get number of queued messages in a Message Queue. More... | |
uint32_t | osMessageQueueGetSpace (osMessageQueueId_t mq_id) |
Get number of available slots for messages in a Message Queue. More... | |
osStatus_t | osMessageQueueReset (osMessageQueueId_t mq_id) |
Reset a Message Queue to initial empty state. More... | |
osStatus_t | osMessageQueueDelete (osMessageQueueId_t mq_id) |
Delete a Message Queue object. More... | |
Message passing is another basic communication model between threads. In the message passing model, one thread sends data explicitly, while another thread receives it. The operation is more like some kind of I/O rather than a direct access to information to be shared. In CMSIS-RTOS, this mechanism is called s message queue. The data is passed from one thread to another in a FIFO-like operation. Using message queue functions, you can control, send, receive, or wait for messages. The data to be passed can be of integer or pointer type:
Compared to a Memory Pool, message queues are less efficient in general, but solve a broader range of problems. Sometimes, threads do not have a common address space or the use of shared memory raises problems, such as mutual exclusion.
struct osMessageQueueAttr_t |
Attributes structure for message queue.
osMessageQueueId_t osMessageQueueNew | ( | uint32_t | msg_count, |
uint32_t | msg_size, | ||
const osMessageQueueAttr_t * | attr | ||
) |
[in] | msg_count | maximum number of messages in queue. |
[in] | msg_size | maximum message size in bytes. |
[in] | attr | message queue attributes; NULL: default values. |
The function osMessageQueueNew creates and initializes a message queue object and returns the pointer to the message queue object identifier or NULL in case of an error.
The parameter msg_count specifies the maximum number of messages om the queue.
The parameter msg_size sets message size in bytes.
The parameter attr specifies additional message queue attributes. Default attributes will be used if set to NULL.
Code Example
Refer to osMessageQueuePut
const char * osMessageQueueGetName | ( | osMessageQueueId_t | mq_id | ) |
[in] | mq_id | message queue ID obtained by osMessageQueueNew. |
The function osMessageQueueGetName returns the pointer to the name string of the message queue identified by parameter mq_id or NULL in case of an error.
*osStatus_t osMessageQueuePut | ( | osMessageQueueId_t | mq_id, |
const void * | msg_ptr, | ||
uint8_t | msg_prio, | ||
uint32_t | timeout | ||
) |
[in] | mq_id | message queue ID obtained by osMessageQueueNew. |
[in] | msg_ptr | pointer to buffer with message to put into a queue. |
[in] | msg_prio | message priority. |
[in] | timeout | Timeout Value or 0 in case of no time-out. |
The blocking function osMessageQueuePut puts a message into the the message queue specified by parameter mq_id.
The parameter msg_ptr points to the buffer with the message to be put into the queue.
The parameter msg_prio defines the message priority (higher numbers indicate a higher priority).
The parameter timeout specifies how long the system waits to put the message into the queue. While the system waits, the thread that is calling this function is put into the BLOCKED state. The parameter timeout can have the following values:
Possible osStatus_t return values:
Code Example:
osStatus_t osMessageQueueGet | ( | osMessageQueueId_t | mq_id, |
void * | msg_ptr, | ||
uint8_t * | msg_prio, | ||
uint32_t | timeout | ||
) |
[in] | mq_id | message queue ID obtained by osMessageQueueNew. |
[out] | msg_ptr | pointer to buffer for message to get from a queue. |
[out] | msg_prio | pointer to buffer for message priority or NULL. |
[in] | timeout | Timeout Value or 0 in case of no time-out. |
The function osMessageQueueGet retrieves a message from the message queue specified by the parameter mq_id and saves it to the buffer pointed to by the parameter msg_ptr.
The parameter msg_prio is a pointer to the buffer containing the message priority or token{NULL}.
The parameter timeout specifies how long the system waits to retrieve the message from the queue. While the system waits, the thread that is calling this function is put into the BLOCKED state. The parameter timeout can have the following values:
Possible osStatus_t return values:
Code Example
Refer to osMessageQueuePut
uint32_t osMessageQueueGetCapacity | ( | osMessageQueueId_t | mq_id | ) |
[in] | mq_id | message queue ID obtained by osMessageQueueNew. |
The function osMessageQueueGetCapacity returns the maximum number of messages in the message queue object specified by parameter mq_id or 0 in case of an error.
uint32_t osMessageQueueGetMsgSize | ( | osMessageQueueId_t | mq_id | ) |
[in] | mq_id | message queue ID obtained by osMessageQueueNew. |
The function osMessageQueueGetMsgSize returns the maximum message size in bytes for the message queue object specified by parameter mq_id or 0 in case of an error.
uint32_t osMessageQueueGetCount | ( | osMessageQueueId_t | mq_id | ) |
[in] | mq_id | message queue ID obtained by osMessageQueueNew. |
The function osMessageQueueGetCount returns the number of queued messages in the message queue object specified by parameter mq_id or 0 in case of an error.
uint32_t osMessageQueueGetSpace | ( | osMessageQueueId_t | mq_id | ) |
[in] | mq_id | message queue ID obtained by osMessageQueueNew. |
The function osMessageQueueGetSpace returns the number available slots for messages in the message queue object specified by parameter mq_id or 0 in case of an error.
osStatus_t osMessageQueueReset | ( | osMessageQueueId_t | mq_id | ) |
[in] | mq_id | message queue ID obtained by osMessageQueueNew. |
The function osMessageQueueReset resets the message queue specified by the parameter mq_id.
Possible osStatus_t return values:
osStatus_t osMessageQueueDelete | ( | osMessageQueueId_t | mq_id | ) |
[in] | mq_id | message queue ID obtained by osMessageQueueNew. |
The function osMessageQueueDelete deletes a message queue object specified by parameter mq_id. It releases internal memory obtained for message queue handling. After this call, the mq_id is no longer valid and cannot be used. The message queue may be created again using the function osMessageQueueNew.
Possible osStatus_t return values: