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
当消息队列已满时,发送线程会被挂起并加入此队列。当接收线程取出消息后,队列中的发送线程会被唤醒继续发送。- 与接收队列分离:避免发送/接收操作的竞争冲突。