2024年最新VxWorks消息队列详解,2024年最新Golang事件分发机制面试

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

int options             /\*消息在消息队列中的排列方式\*/
)

options一般有两个选项:  
 MSG\_Q\_FIFO 表示消息以先进先出的方式在队列中  
 MSG\_Q\_PRIORITY 表示消息以优先级的方式在队列中,高优先级的消息会直接送到队列顶端  
 返回一个MSG\_Q\_ID类型的队列ID。


2. msgQSend 向一消息队列发送消息包



STATUS msgQSend
(
MSG_Q_ID msgQId, /* 要发送信息的队列id*/
char * buffer, /* 要发送的信息 */
UINT nBytes, /* 要发送信息的长度(字节),即sizeof(buffer) */
int timeout, /* 消息进入队列的等待时间 */
int priority /* 该消息的优先级 */
)


timeout意思是:当消息队列已满时,等待消息队列有空间时所等待的时间。超过该时间还没空间可用的话,消息包被舍弃。它有两个特殊值:NO\_WAIT(0)立即返回,不管消息包是否被发送;WAIT\_FOREVER(-1)一直等待消息队列有空间可用。  
 priority表示:指明发送的消息的优先级,可能值有:MSG\_PRI\_NORMAL(0)正常优先级,将消息置于消息队列的尾部;MSG\_PRI\_URGENT(1)紧急消息,将消息置于消息队列的首部。  
 返回一个STATUS状态值


3. msgQReceive从队列接收消息



int msgQReceive
(
MSG_Q_ID msgQId, /* 接收消息的队列的ID */
char * buffer, /* 接收消息字节缓冲区 */
UINT maxNBytes, /* 接受字节的最大长度 */
int timeout /* 等待时间 */
)


该函数从消息队列msgQId接收消息,将其拷贝到最大长度为maxNBytes的缓冲区buffer。如果消息包长度超过maxNBytes,多余部分被舍弃。等待时间timeout有两个特殊值: NO\_WAIT(0)立即返回,WAIT\_FOREVER(-1)一直等待消息队列有消息可取。  
 返回接收到的buffer的字节大小或者ERROR


4. msgQDelete 删除一个消息队列



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


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EUUYU7gs-1638607332359)(https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20211203231804481.png)]


![image-20211203231819363](https://img-blog.csdnimg.cn/img_convert/73b609e4da6486638cfc632f710b9ed8.png)


![image-20211203231837651](https://img-blog.csdnimg.cn/img_convert/73b609e4da6486638cfc632f710b9ed8.png)


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BCc3lL8e-1638607332361)(https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20211203231901964.png)]


### 三、代码实例


要实现跑VxWorks的代码,我们需要安装tornado集成开发环境,这个开发环境支持xp和win7 32位操作系统,考虑到我们现在的PC一般都是Windows10操作系统,因此我们可以考虑使用VMware来安装一个win7 32位。


安装教程我当时是参考的:


[tornado2.2安装教程]( )


[Tornado2.2安装教程]( )




---


注意代码中不要使用 // 注释,tornado2.2默认是不支持的。



#include “vxWorks.h”
#include “msgQLib.h”

#define MAX_MSGS (10)
#define MAX_MSG_LEN (100)

MSG_Q_ID myMsgQId;

task3(void)
{

if ((myMsgQId = msgQCreate (MAX_MSGS, MAX_MSG_LEN, MSG_Q_PRIORITY)) == NULL)    
    return (ERROR);   

}

task2 (void)
{
char msgBuf[MAX_MSG_LEN];

if (msgQReceive(myMsgQId, msgBuf, MAX_MSG_LEN, WAIT_FOREVER) == ERROR)    
    return (ERROR);   


logMsg ("Message from task 1:\n%s\n", msgBuf, 0,0,0,0,0);

}

#define MESSAGE “Greetings from Task 1”
task1 (void)
{
taskDelay (sysClkRateGet()*5);

if (msgQSend (myMsgQId, MESSAGE, MAX_MSG_LEN, WAIT_FOREVER,
MSG_PRI_NORMAL) == ERROR)
return (ERROR);

}

void TestMsgQ(void)
{
taskSpawn(“t3”,100,0,0x20000,(FUNCPTR)task3,0,0,0,0,0,0,0,0,0,0);
taskSpawn(“t2”,100,0,0x20000,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);
taskSpawn(“t1”,100,0,0x20000,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);
}


启动shell,输入



sp TestMsgQ


-> sp TestMsgQ  
 task spawned: id = 38092b0, name = s2u0  
 value = 58757808 = 0x38092b0


然后输入 i,查看此时操作系统有几个任务在运行。


-> i  
 NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY




---


tExcTask \_excTask 3818dd8 0 PEND 408358 3818cd8 0 0  
 tLogTask \_logTask 38132a8 0 PEND 408358 38131a8 0 0  
 tWdbTask \_wdbTask 380e660 3 READY 408358 380e510 0 0  
 t2 \_task2 37ddde0 100 PEND 408358 37ddc94 0 0  
 t1 \_task1 37baa88 100 DELAY 408358 37ba9dc 0 195  
 value = 0 = 0x0


![img](https://img-blog.csdnimg.cn/img_convert/bb662021e40d74b9395d6e68423822a5.png)
![img](https://img-blog.csdnimg.cn/img_convert/7bd03fb2bdaa3f6b7d5d1d7c115d33fb.png)
![img](https://img-blog.csdnimg.cn/img_convert/431f64e7795791e55b288686d1bf46eb.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值