RT-Thread 消息队列控制块

1. ​继承关系与 IPC 对象管理
  • struct rt_ipc_object parent
    继承自 IPC 基类 rt_ipc_object,提供线程挂起队列、对象名称等通用 IPC 特性。
    • parent.suspend_thread:管理接收消息的等待线程队列(FIFO 或优先级模式)。
    • parent.parent.name:用于调试标识消息队列(如 "my_mq")。
    • parent.flag:决定线程挂起策略(RT_IPC_FLAG_FIFO 或 RT_IPC_FLAG_PRIO)。

2. ​消息池与容量管理
  • void *msg_pool
    指向动态分配的环形消息池起始地址,用于存储消息数据。每个消息块大小为 msg_size,总容量为 max_msgs
  • rt_uint16_t msg_size
    单个消息的最大字节数(如 sizeof(int) 或自定义结构体大小)。
  • rt_uint16_t max_msgs
    消息队列的最大容量,即消息池可存储的消息总数。
  • rt_uint16_t entry
    当前队列中有效消息的数量,用于快速判断队列是否满/空。

3. ​消息链表与空闲管理
  • msg_queue_head 与 msg_queue_tail
    维护消息的 FIFO 链表结构:
    • msg_queue_head:指向待处理消息链表的头部(最早进入队列的消息)。
    • msg_queue_tail:指向链表尾部(最新插入的消息)。
  • msg_queue_free
    管理空闲消息块链表。动态初始化时,内核将消息池划分为 max_msgs 个消息块,通过此链表快速分配和回收。

4. ​发送线程挂起队列
  • rt_list_t suspend_sender_thread
    当消息队列已满时,发送线程会被挂起并加入此队列。当接收线程取出消息后,队列中的发送线程会被唤醒继续发送。
    • 与接收队列分离:避免发送/接收操作的竞争冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值