Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ringbuffer
消息队列_msg_queue
assert
使用ringbuffer时,自检到thread的type不匹配
发布于 2021-04-08 11:09:46 浏览:820
订阅该版
[tocm] ## 错误现象: `msh >(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread) assertion failed at function:rt_thread_resume, line number:770 ` ## 代码: ```c void pack_thread_entry(void *parameter) { rt_err_t result; rt_size_t len = 0; rt_size_t size = 0; uint8_t cal[512] = {0}; uint16_t send_len = 0; uint8_t send[512] = {0}; struct msg ind_send; g_data_ringbuffer = rt_ringbuffer_create(RINGBUFFER_SIZE); while (1) { // len = rt_ringbuffer_data_len(g_data_ringbuffer); // if (len >= CTD_PACK_SIZE) // { if (g_data_count == 24) { g_data_count = 0; len = rt_ringbuffer_data_len(g_data_ringbuffer); // while (rt_ringbuffer_data_len(g_data_ringbuffer)) // { size = rt_ringbuffer_get(g_data_ringbuffer, cal, len); // rt_ringbuffer_reset(g_data_ringbuffer); // send_len = package_ind_data(cal, size, send); // for (uint16_t i = 0; i < send_len; i++) // { // pm_printf("%c", send[i]); // } // } send_len = 1024; ind_send.data_ptr = send; ind_send.data_size = send_len; result = rt_mq_send(g_ind_send_mq, (void*)&ind_send, sizeof(struct msg)); if ( result == -RT_EFULL) { /* 消息队列满 */ rt_kprintf("ind_send_mq full!\n"); } /* 申请一块内存 要是内存池满了 就挂起等待 */ // ind_send = rt_mp_alloc(tmp_msg_mp, RT_WAITING_FOREVER); // ind_send->data_size = send_len; // ind_send->data_ptr = send; // rt_mb_send(tmp_msg_mb, (rt_ubase_t)ind_send); // ind_send = NULL; // } } rt_thread_mdelay(10); } } ``` ## 分析过程: 定位问题,这是在rt_mq_send中死机打印上述提示信息的 消息队列换为邮箱+内存池,仍有同样问题 注释掉消息队列,仅用ringbuffer,正常 注释掉ringbuffer,仅用消息队列,正常 这是什么原因呢,是因为用ringbuffer有哪不合适吗
查看更多
aozima
2021-04-08
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!
```c uint8_t cal[512] = {0}; uint8_t send[512] = {0}; ``` 你这2个大的局部数组,很可能撑爆了你的栈,你看下你的线程栈是多大。
4
个回答
默认排序
按发布时间排序
aprilhome
2021-04-08
这家伙很懒,什么也没写!
这是什么问题呢,是ringbuffer有哪用的不合适吗
mii
2021-04-08
这家伙很懒,什么也没写!
不会是您邮箱初始化不对吧
flashman2002
2021-04-08
这家伙很懒,什么也没写!
估计是你的线程栈设置过小了。
撰写答案
登录
注册新账号
关注者
0
被浏览
820
关于作者
aprilhome
这家伙很懒,什么也没写!
提问
21
回答
75
被采纳
2
关注TA
发私信
相关问题
1
rt_object_init中报assertion failed错误?
2
在 MDK中的NANO 里创建消息队列失败,内存堆已开启
3
如何用消息队列传递结构体数据
4
消息队列满了以后接收乱码
5
消息队列传输不定长数据
6
使用消息队列在线程中发送总失败
7
初始化第二个消息队列时发生硬件错误
8
rtthread消息队列一对多的情况
9
消息队列为什么会出现获取到的内容有旧的数据?
10
通过消息队列名称,获取消息队列句柄
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
五分钟玩转RT-Thread新社区
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
6
国产MCU移植系列教程汇总,欢迎查看!
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用 D1s (RDC2022 纪念版) 连接 thingspeak
2
RTduino 初体验
3
stm32wle5 双SRAM使用
4
开工大吉 | 借RT-Thread的论坛宝地,给各位嵌入式开发者送106块开发板!
5
随笔、FinSH原理浅析
热门标签
RT-Thread Studio
串口
LWIP
SPI
Env
AT
FinSH
ART-Pi
Bootloader
CAN总线
Hardfault
文件系统
USB
DMA
RT-Thread
线程
stm32
RT-Thread Nano
SCons
MQTT
ESP8266
ota
packages_软件包
UART
rtthread
RTC
freemodbus
I2C
flash
cubemx
W5500
rt-smart
定时器
FAL
rtt
PWM
ADC
BSP
SDIO
msh
AB32VG1
Debug
C++_cpp
socket
SFUD
中断
编译报错
MicroPython
keil
LVGL
本月问答贡献
出出啊
1424
个答案
315
次被采纳
小小李sunny
1326
个答案
262
次被采纳
crystal266
488
个答案
144
次被采纳
whj467467222
1210
个答案
141
次被采纳
张世争
581
个答案
131
次被采纳
本月文章贡献
出出啊
4
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
crystal266
1
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
张世争
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部