邮箱

邮箱

​ 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)
原文地址:https://www.cnblogs.com/zhang-han/p/14123123.html