OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4709|回复: 6

消息队列创建设置长度问题

[复制链接]

17

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2019-4-28
在线时间
66 小时
发表于 2022-8-18 16:58:41 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 0孙悟空0 于 2022-8-18 17:08 编辑

ucosii下创建消息队列长度为8。指8个消息。如下OS_EVENT *RcvNetMsg;OS_EVENT *SndNetMsg;
void *RcvNetMsgGrp[8];//net接收消息队列
void *SndNetMsgGrp[8];//net发送消息队列.
RcvNetMsg = OSQCreate(&RcvNetMsgGrp[0],8);
但是我发现发送的数据长度却能比8个字节多,为什么???像下面,OSQPost(RcvNetMsg,rcv_ptr);//发送消息,发送的数据量大于8字节
snd_ptr=OSQPend(SndNetMsg,10,&perr);//请求消息队列,没有消息则10ms后退出。snd_data_len有时会大于8
                                        if(perr == OS_ERR_NONE)//有数据要发送
                                        {
                                                snd_data_len =(u16)(snd_ptr[0]<<8) + snd_ptr[1];
                                                err = netconn_write(tcp_clientconn,&snd_ptr[2],snd_data_len,NETCONN_COPY); //发送数据
        
                                                if(err != ERR_OK)
                                                {
                                                        printf("tcp发送失败\r\n");
                                                        
//                                                        delay_ms(1000);
//                                                        NVIC_SystemReset();
                                                }
                                                myfree(SRAMIN,snd_ptr);//释放空间
                                        }







正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2019-4-28
在线时间
66 小时
 楼主| 发表于 2022-8-18 17:02:10 | 显示全部楼层
难道传递的是数据的地址?那void *RcvNetMsgGrp[8];//net接收消息队列,中的8为啥不设置为1,我看原子的历程是128
回复

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2022-8-18 17:52:19 | 显示全部楼层
帮顶  
回复

使用道具 举报

17

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2019-4-28
在线时间
66 小时
 楼主| 发表于 2022-8-19 09:14:26 | 显示全部楼层
顶,队列长度是否就是可以传递的字节数
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
773
金钱
773
注册时间
2021-4-15
在线时间
304 小时
发表于 2022-8-19 09:27:25 | 显示全部楼层
0孙悟空0 发表于 2022-8-19 09:14
顶,队列长度是否就是可以传递的字节数

队列 一般是由 数据类型(DATA) 加上队尾(REAR)和队头(FRONT)组成的 一般都是定义成一个结构体类型!你要是有疑问的话你可以去到 队列的类型那里查看队列的结构体定义 可能UCOSII里面的会有一些改进,但是循环队列的 一般自己使用的话 三者就可以了
日常敲键--头秃一片
回复

使用道具 举报

17

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2019-4-28
在线时间
66 小时
 楼主| 发表于 2022-8-19 13:58:08 | 显示全部楼层
日渐秃兀 发表于 2022-8-19 09:27
队列 一般是由 数据类型(DATA) 加上队尾(REAR)和队头(FRONT)组成的 一般都是定义成一个结构体类型 ...

那假设我创建的队列长度是8,像RcvNetMsg = OSQCreate(&RcvNetMsgGrp[0],8);
那我通过队列传递的数据字节数是否必须在8个字节以内?
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
773
金钱
773
注册时间
2021-4-15
在线时间
304 小时
发表于 2022-8-19 20:32:36 | 显示全部楼层
0孙悟空0 发表于 2022-8-19 13:58
那假设我创建的队列长度是8,像RcvNetMsg = OSQCreate(&RcvNetMsgGrp[0],8);
那我通过队列传递的数据字 ...

如果你设置结构体的类型 的数据类型 的数组是那么大的话 确实最大只能放那么大的数据 如果是指针的话 就要动态分配  你可以看看一些比较简单的 比如串口队列发送这些基础的队列应用 基于51实现的比较多 你有兴趣可以看看
日常敲键--头秃一片
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 07:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表