目录
1. 简介
1.1消息队列(异步通信方式)
在任务与任务间,中断与任务间传递消息,完成信息的交换;
存放不同任务或中断的不固定长度的消息,其他不同的任务能够从消息队列里面读取消息,队列存储的是数据的地址;
设定阻塞时间timeout:
1. 等待时间在设定的阻塞时间timeout内,若消息队列为空无有效数据,任务将保持阻塞状态以等待队列有有效数据,当队列有有效数据时被阻塞的任务会被唤醒并处理有效数据;
2. 等待时间超过了阻塞时间timeout,若消息队列队列中仍然没有有效数据,任务还是会自动从阻塞态转为就绪态 。
1.2消息池
定义数组 OSCfg_MsgPool[OS_CFG_MSG_POOL_SIZE] ,将该数组的所有元素(消息)串成单向链表,形成一个共用资源。(消息的存取在链表的首尾实现)
系统所有消息队列都能从消息池中取出消息挂到自己的队列,消息使用完后放回消息池可继续供其他消息队列调出取用。
2.结构体
2.1消息元素os_msg
– NextPtr :指向下一个可用的消息。
– MsgPtr:指向实际的消息。
– MsgSize:记录消息的大小(以字节为单位)。
– MsgTS:记录发送消息时的时间戳
2.2消息池元素osmsgpool(全局变量)
– NextPtr :指向下一个可用的消息。
– NbrFree :记录消息池中可用的消息个数
– NbrUsed:记录已用的消息个数。
– NbrUsedMax:记录使用的消息峰值数量。
消息池中消息的存取