Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DMA
串口
rt_mq_消息队列_msg_queue
5
串口DMA消息队列接收数据,消息队列接收不到
发布于 2021-03-22 11:15:23 浏览:2267
订阅该版
安装RT-Thread官方文档写串口DMA接收数据。 上位机向串口发送数据时,可以进入串口接收回调函数,发送数据到消息队列。但是在线程中接收消息队列一直接收不到(使用RT_WAITING_FOREVER一直等待就会一直卡死)。好像是串口接收数据格式的原因,官方文档是建立一个结构体储存串口数据结构,将这个结构体发送到消息队列,我将这个结构体变换成一个字符发送消息队列就可以接收到。请问这是什么原因呢? ``` #include
#define DBG_TAG "main" #define DBG_LVL DBG_LOG #include
extern void XIAOXI_test(void); int main(void) { int count = 1; XIAOXI_test(); while (count++) { // LOG_D("Hello RT-Thread!"); rt_thread_mdelay(1000); } return RT_EOK; } static struct rt_messagequeue mq; static rt_uint8_t msg_pool[2048]; #define SAMPLE_UART_NAME "uart2" /* 串口设备名称 */ static rt_device_t serial; /* 串口设备句柄 */ struct rx_msg { rt_device_t dev; rt_size_t size; }; static rt_err_t uart_input(rt_device_t dev, rt_size_t size) { struct rx_msg msg; rt_err_t result; msg.dev = dev; msg.size = size; rt_mq_send(&mq, &msg, sizeof(msg)); return result; } void my_xiaoxi1_entry(void *parameter) { char str[]={"my_xiaoxi1_entry uart success\n"}; serial = rt_device_find(SAMPLE_UART_NAME); rt_device_open(serial, RT_DEVICE_FLAG_DMA_RX); rt_device_set_rx_indicate(serial, uart_input); struct rx_msg msg; rt_err_t result; rt_uint32_t rx_length; static char rx_buffer[RT_SERIAL_RB_BUFSZ + 1]; while(1) { rt_memset(&msg, 0, sizeof(msg)); result=rt_mq_recv(&mq, &msg, sizeof(msg), RT_WAITING_FOREVER); if (result == RT_EOK) { rx_length = rt_device_read(msg.dev, 0, rx_buffer, msg.size); rx_buffer[rx_length] = '\0'; rt_device_write(serial, 0, rx_buffer, rx_length); rt_kprintf("%s\n",rx_buffer); } rt_device_write(serial, 0, str, (sizeof(str) - 1)); rt_thread_mdelay(5); } } void my_xiaoxi2_entry(void *parameter) { while(1) { LOG_D("Hello RT-Thread!"); rt_thread_mdelay(1000); } } void XIAOXI_test(void) { rt_err_t result; result = rt_mq_init(&mq, "mqt", &msg_pool[0], /* 内存池指向 msg_pool */ 1, /* 每个消息的大小是 1 字节 */ sizeof(msg_pool), /* 内存池的大小是 msg_pool 的大小 */ RT_IPC_FLAG_FIFO); /* 如果有多个线程等待,按照先来先得到的方法分配消息 */ if (result == RT_EOK) { rt_kprintf("*************************************.\n"); // return -1; } rt_thread_t tid1; tid1 = rt_thread_create("XIAOXI1", my_xiaoxi1_entry, RT_NULL, 1024, 8, 10); if (tid1 != RT_NULL) rt_thread_startup(tid1); rt_thread_t tid2; tid2 = rt_thread_create("XIAOXI2", my_xiaoxi2_entry, RT_NULL, 1024, 20, 10); if (tid2 != RT_NULL) rt_thread_startup(tid2); } ``` 使用了两个串口,控制台使用串口1,数据发送接收使用的串口2。
查看更多
flashman2002
2021-03-22
这家伙很懒,什么也没写!
你的mq初始化有错误: ``` result = rt_mq_init(&mq, "mqt", &msg_pool[0], /* 内存池指向 msg_pool */ 1, /* 每个消息的大小是 1 字节 */ sizeof(msg_pool), /* 内存池的大小是 msg_pool 的大小 */ ``` 其中每个消息的大小不是1,而是sizeof(struct rx_msg)
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
0
被浏览
2.3k
关于作者
低调的张扬
这家伙很懒,什么也没写!
提问
1
回答
1
被采纳
0
关注TA
发私信
相关问题
1
串口DMA发送数据时,数据被覆盖
2
关于串口DMA模式下rt_device_close问题
3
利用stm32f427实现usb转串口,电脑端什么也没有识别到
4
finsh 控制台 适配 RS 485请大神指点????
5
uart_sample.c 中,读串口设备时偏移量pos要设置为-1而不是0?
6
【结贴】at_device软件包中对串口接收数据缺少判断导致数据接收异常
7
串口无法接受数据,但可以发送
8
串口如何有效的清除掉接收缓冲,而不必一个一个的去读取
9
串口接收使用方式问题
10
雅特力FINSH问题
推荐文章
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
freemodbus主机在freertos的适配,参考rtthread例程
2
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
3
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
4
RT-Thread EtherKit开源以太网硬件正式发布
5
还在担心bsp不好维护吗?快使用yml管理主线bsp
热门标签
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
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
12
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
用户名由3_15位
14
个答案
2
次被采纳
rv666
9
个答案
2
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
8
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部