0


创建队列流程

1.初始化队列:给队列属性参数赋值 ,再通过mq_open函数创建队列

void ExternalInit(void)
{
struct mq_attr qattr; //队列属性

qattr.mq_flags = 0;
 qattr.mq_maxmsg = EXT_MAX_QUEUE_SIZE;
 qattr.mq_msgsize = sizeof(ExternalEvent);

extOutQueue = mq_open("**external_out**", O_CREAT | O_NONBLOCK, 0644, &**qattr**);//线程创建
 assert(extOutQueue != -1);

extQuit = false;

}

extOutQueue 代表队列句柄,用来关闭队列。定义:static mqd_t extOutQueue = -1;-1 代表队列未启用。

typedef int mqd_t;

**struct ****mq_attr ****{
long mq_flags; /* message queue flags /
long mq_maxmsg; /
maximum number of messages /
long mq_msgsize; /
maximum message size /
long mq_curmsgs; /
number of messages currently queued /
};
*

**2.发送队列 *举例如下,队列格式自定义
evOut.type = EXTERNAL_TEST2;
evOut.arg1 = cmdBuf[4];
evOut.arg2 = cmdBuf[5];
mq_send(extOutQueue, (const char)&evOut, sizeof (ExternalEvent), 0);//发送函数

evOut 为队列中传递的数据,自定义,举例如下

**ExternalEvent evOut **;

typedef struct
{
ExternalEventType type;
int arg1;
int arg2;
int arg3;
uint8_t buf1[EXTERNAL_BUFFER_SIZE];

} ExternalEvent;

typedef enum
{
EXTERNAL_SHOW_MSG, ///< Show message
EXTERNAL_TEST0, ///< Test #0
EXTERNAL_TEST1, ///< Test #1
EXTERNAL_TEST2, ///< Test #2
} ExternalEventType;

3.队列接收 函数举例如下,参数类型同Send函数

mq_receive(extOutQueue, (char)&evIn, sizeof(ExternalEvent), 0)*

返回值>0代表收到数据,返回值-1代表未收到数据。

4. 队列退出

mq_close(extOutQueue);

extOutQueue = -1;

标签: freertos

本文转载自: https://blog.csdn.net/zhangmian_0206/article/details/120872891
版权归原作者 zhangmian_0206 所有, 如有侵权,请联系我们删除。

“创建队列流程”的评论:

还没有评论