邮箱
RT-Thread 操作系统的邮箱用于线程间通信,特点是开销比较低,效率较高。邮箱中的每一封邮件只能容纳固定的 4 字节内容(针对 32 位处理系统,指针的大小即为 4 个字节,所以一封邮件恰好能够容纳一个指针)。
线程或中断服务例程把一封 4 字节长度的邮件发送到邮箱中,而其他需要的线程可以从邮箱中接收这些邮件并进行处理。
struct rt_mailbox
{
struct rt_ipc_object parent; /**< inherit from ipc_object */
rt_uint32_t *msg_pool; /**< start address of message buffer */
rt_uint16_t size; /**< size of message pool */
rt_uint16_t entry; /**< index of messages in msg_pool */
rt_uint16_t in_offset; /**< input offset of the message buffer */
rt_uint16_t out_offset; /**< output offset of the message buffer */
rt_list_t suspend_sender_thread; /**< sender thread suspended on this mailbox */
};
typedef struct rt_mailbox *rt_mailbox_t;
struct rt_mailbox static_mb;
rt_mailbox_t dynamic_mb;
初始化与脱离
rt_err_t rt_mb_init(rt_mailbox_t mb, const char *name, void *msgpool,
rt_size_t size,rt_uint8_t flag)
RT_IPC_FLAG_FIFO
RT_IPC_FLAG_PRIO
rt_err_t rt_mb_detach(rt_mailbox_t mb
创建与删除
rt_mailbox_t rt_mb_create(const char *name, rt_size_t size, rt_uint8_t flag)
rt_err_t rt_mb_delete(rt_mailbox_t mb)
发送邮件
rt_err_t rt_mb_send(rt_mailbox_t mb, rt_uint32_t value)
rt_err_t rt_mb_send_wait(rt_mailbox_t mb, rt_uint32_t value, rt_int32_t timeout)
接收邮件
rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_uint32_t *value, rt_int32_t timeout)