VxWorks入门笔记 -- 消息队列

    技术2022-05-20  29

    Vxworks入门笔记--消息队列

    一.概念:

    1.消息队列用于Task之间传递信息。

    2.多个任务向同一个消息队列发送消息或接收消息。

    3.ISR可以用NO_WAIT方式发送消息。

    .控制函数:

    1. msgQCreate

    MSG_Q_ID msgQCreate ( int maxMsgs, /* 消息队列长度(最大消息个数) */ int maxMsgLength, /* 消息队列中消息的最大长度*/ int options /* FIFO/PRIORITY 等待Task排队方式*/ )

     

    2. msgQSend

    STATUS msgQSend ( MSG_Q_ID msgQId, /* 消息队列ID */ char *buffer, /* 指向要发送的消息的指针*/ UINT nBytes, /* 消息长度*/ int timeout, /* 超时时间(tick)/no-wait/forever */ int priority /* MSG_PRI_NORMAL 或MSG_PRI_URGENT */ )

    3.msgQReceive

    int msgQReceive ( MSG_Q_ID msgQId, /* 消息队列ID */ char *buffer, /* 指向接消息的收缓冲的指针*/ UINT maxNBytes, /* 接收缓冲的字节数*/ int timeout /* 超时时间(tick)/no-wait/forever */ )

     

    4. msgQDelete

    STATUS msgQDelete ( MSG_Q_ID msgQId /* 需要删除的消息队列的ID */ )

    一旦msgQDelete()操作执行完毕,阻塞在该消息队列上的Task,包括阻塞在发送队列、接收队列上的Task,都将被唤醒(Unpend),而消息队列的ID从此不再有效。

     

    三.建议:

     

    1.为每一个Task创建专用MsgQ

    2.所有需发给该TaskMessage都送到唯一MsgQ

    3.因为消息队列有Copy & MaxLength的特性,所以消息队列中我们可以只存放指针。


    最新回复(0)