Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
线程通信
邮箱_mailbox
邮箱断言问题,接收时出错
发布于 2022-06-28 11:25:58 浏览:820
订阅该版
在使用邮箱的时候出现 assertion failed at function:rt_mb_recv 断言问题,用的第一个邮箱是可以运行的,但是第二个邮箱在接受时出错,论坛上说可能是内存溢出,请问如何如何解决该问题? 定义结构体、创建线程、创建邮箱,启动线程 ```c typedef struct str_mpu_adc { rt_int16_t accelx; rt_int16_t accely; rt_int16_t accelz; rt_int16_t gyrox; rt_int16_t gyroy; rt_int16_t gyroz; float temp; rt_uint32_t vol; } str_mpu_adc_t; static struct rt_mailbox mpu6050_mb;//创建邮箱名称 static struct str_mpu_adc gfx_mpu;//定义通过邮箱传送的结构体 int mpu6050_adc(void) { rt_err_t result = RT_EOK; /* 初始化mailbox传送mpu6050与adc数据 */ result = rt_mb_init(&mpu6050_mb, "mpu6050_mb", /* 名称是 mpu6050_mb */ &mb_mpu_pool[0], /* 邮箱用到的内存池是 mb_mpu_pool */ sizeof(mb_mpu_pool) / 4, /* 邮箱中的邮件数目,因为一封邮件占 4 字节 */ RT_IPC_FLAG_PRIO); /* 采用 FIFO 方式进行线程等待 */ if (result != RT_EOK) { LOG_D("init mpu6050_mb failed.\n"); return -1; } //创建pum6050线程 impu6xxx_init = rt_thread_create("impu6xxx_init", impu6_entry, NULL, 2048, 20, 5); if(impu6xxx_init != RT_NULL) { LOG_D("impu6xxx_init successed ...\r\n"); rt_thread_startup(impu6xxx_init); } //创建adc线程 adc_in5 = rt_thread_create("adc_in5", adc_in5_entry, NULL, 2048, 20, 5); if(adc_in5 != RT_NULL) { LOG_D("adc_in5 successed ...\r\n"); rt_thread_startup(adc_in5); } return RT_EOK; } ``` 将数写入结构体中,mpu6050的各种参数 ```c gfx_mpu.accelx = accel.x; gfx_mpu.accely = accel.y; gfx_mpu.accelz = accel.z; gfx_mpu.gyrox = gyro.x; gfx_mpu.gyroy = gyro.y; gfx_mpu.gyroz = gyro.z; gfx_mpu.temp = temp; gfx_mpu.vol = vol; ``` 发送邮箱 ```c rt_mb_send(&mpu6050_mb,(rt_ubase_t)&gfx_mpu);//发送邮箱,由于使用的是oled库(u8g2),该库是使用C++编写的,所以读取是在另一个.cpp文件读取 ``` oled_display.cpp ```c //在该文件中读取邮箱的内容 if (rt_mb_recv(&mpu6050_mb, (rt_ubase_t *)&gfx_mpu, RT_WAITING_NO) == RT_EOK) { rt_kprintf("accel.x = %4d, accel.y = %4d, accel.z = %4d \r\n", gfx_mpu.accelx,gfx_mpu.accely, gfx_mpu.accelz); rt_kprintf("gyro.x = %4d gyro.y = %4d, gyro.z = %4d, \r\n",gfx_mpu.gyrox, gfx_mpu.gyroy,gfx_mpu.gyroz); rt_kprintf("temp = %d.%d\r\n", (int)(gfx_mpu.temp * 100) / 100, (int)(gfx_mpu.temp * 100) % 100); rt_kprintf("the voltage is :%d.%02d \n", gfx_mpu.vol / 1000, gfx_mpu.vol % 1000);} ``` 出错结果: ![image-20220628163408500.png](https://oss-club.rt-thread.org/uploads/20220628/30a49fb0374e10b81b25d8c466d9eabc.png "image-20220628163408500.png")
查看更多
2
个回答
默认排序
按发布时间排序
yannick
2022-06-28
这家伙很懒,什么也没写!
由于我的发送邮件`rt_mb_send` 和接受邮件`rt_mb_recv `不在一个.c文件里,这是产生问题的原因,但是具体原理并不太懂,我的解决办法是将接受邮件和`rt_mb_create `创建邮件放在同一.c文件里,而发送邮件放在其他.c文件里就可以解决上述问题
吉利咕噜2022
2022-06-28
国防科大-军品研发
你最好把相关代码贴出来,要不然不太好判断哦。或者你自己仔细找找,可能是误传入了空指针。比如你调用`rt_mb_recv()`函数的线程,运行的比较早,在你创建邮箱之前去读了。
撰写答案
登录
注册新账号
关注者
0
被浏览
820
关于作者
yannick
这家伙很懒,什么也没写!
提问
2
回答
1
被采纳
0
关注TA
发私信
相关问题
1
邮箱阻塞接收设为永久阻塞却收到了RT_ETIMEOUT错误码
2
mailbox 邮件收发只能在一个文件中进行
3
mailbox接收函数对于超时时间的处理疑问
4
关于事件集和邮箱那一块
5
邮箱能否支持多个收听?
6
关于邮箱传递消息,当消息很长的时候
7
一对多线程间通信的问题
8
邮箱,队列,信号在LCD菜单中内容刷新的选用
9
关于邮箱的疑问(如何解决在接收端处理速度慢情况下的同地址发送内容)
10
使用邮箱在某些情况下收不到邮件
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
16
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部