UCOSIII实时操作系统------消息队列


前言

UCOSIII实时操作系统------消息队列


提示:以下是本篇文章正文内容,下面案例可供参考

一、概述

“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源头发送到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。

消息队列常用于数据的传输,等待消息队列成功后,得到的是消息内容指针。

二、函数接口

1.创建消息队列

代码如下(示例):

void  OSQCreate (OS_Q        *p_q,
                 CPU_CHAR    *p_name,
                 OS_MSG_QTY   max_qty,
                 OS_ERR      *p_err)

参数: p_q,消息队列对象 p_name,消息队列的名字 max_qty,消息队列支持多少条消息 p_err,返回错误码,没有错误的就返回OS_ERR_NONE

2.等待消息

代码如下(示例):

void  *OSQPend (OS_Q         *p_q,
                OS_TICK       timeout,
                OS_OPT        opt,
                OS_MSG_SIZE  *p_msg_size,
                CPU_TS       *p_ts,
                OS_ERR       *p_err)

参数: p_q,消息队列对象 timeout,超时时间,默认写0,一直等待 opt,设置当前等待互斥锁的阻塞方式,默认写OS_OPT_PEND_BLOCKING,阻塞等待 p_msg_size,消息的大小 p_ts,用于记录等待消息花了多长时间,默认写NULL,不记录。 p_err,返回错误码,没有错误的就返回OS_ERR_NONE

返回值: NULL,没有接收到消息 非NULL,指向消息内容 注意: 等待消息且使用完毕后,需将消息内容清空,否则在后续的使用可能出现问题。

3.发送消息

代码如下(示例):

void  OSQPost (OS_Q         *p_q,
               void         *p_void,
               OS_MSG_SIZE   msg_size,
               OS_OPT        opt,
               OS_ERR       *p_err)

参数: p_q,消息队列的对象 p_void,消息的内容 msg_size,消息的大小 opt,OS_OPT_POST_FIFO+OS_OPT_POST_ALL(发送给所有等待消息的任务)或许OS_OPT_POST_FIFO p_err,返回错误码,没有错误的就返回OS_ERR_NONE


总结

经验分享 程序员 微信小程序 职场和发展