Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
rt_mq_消息队列_msg_queue
两个串口都用到各自的消息队列接受解析数据,其中一个一直显示发送消息队列满
发布于 2021-03-01 11:17:54 浏览:1319
订阅该版
![微信图片_20210301111616.png](https://oss-club.rt-thread.org/uploads/20210301/ea2cffc8451ec8e3973387b7523daf35.png) ![微信图片_20210301111627.png](https://oss-club.rt-thread.org/uploads/20210301/5a409e9fbd607484a67de7f38c6ac8ca.png) finsh打印消息显示这个 msh >list_msgqueue entry suspend thread -------- ---- -------------- mqt 0000 0 mqt 0007 0
查看更多
1
个回答
默认排序
按发布时间排序
等风来
2021-03-01
这家伙很懒,什么也没写!
#include
#include
#include
#include
#include
#include
#define GPS_UART "uart3" typedef struct { char buf[128]; unsigned short sta; }uart_rcv_typedef; uart_rcv_typedef GPS_ur; static rt_thread_t GPS_rcv_thread = RT_NULL, GPS_parse_thread = RT_NULL; static rt_device_t GPS_DEV_UART; static struct rt_messagequeue GPS_mq; /* 消息队列中用到的放置消息的内存池*/ static rt_uint8_t GPS_msg_pool[1024]; static struct rt_semaphore GPS_rx_sem; static void GPS_rcv_thread_entry(void* parameter); static void GPS_parse_thread_entry(void* parameter); //static char Task_Uart0_Rx =0; // //static char Rx0_Buffer[30]; //static char Rx0_Process_Buffer[30]; //static char Rx0_Ptr; // //static char Rx0_Step=0; //static char Parse_DATA(unsigned char ch); static rt_err_t GPS_uart_input(rt_device_t dev, rt_size_t size) { rt_sem_release(&GPS_rx_sem); return RT_EOK; } //主函数 int GPS_thread_start(void) { struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 初始化配置参数 */ char str[] = "version\r\n"; rt_sem_init(&GPS_rx_sem, "GPS_rx_sem", 0, RT_IPC_FLAG_FIFO); rt_err_t ret=rt_mq_init(&GPS_mq,"mqt",&GPS_msg_pool[0], 1024,sizeof(GPS_msg_pool),RT_IPC_FLAG_FIFO);/* 内存池指向GPS_msg_pool */ if( ret==RT_EOK) rt_kprintf("%s GPS_mq init sucessed\n"); GPS_DEV_UART = rt_device_find(GPS_UART); rt_kprintf("%s listen on\n",GPS_UART); config.baud_rate = BAUD_RATE_115200; //修改波特率为 921600 rt_device_control( GPS_DEV_UART, RT_DEVICE_CTRL_CONFIG, &config); // rt_device_open(GPS_DEV_UART , RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX ); rt_device_open(GPS_DEV_UART , RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_DMA_RX ); rt_device_set_rx_indicate(GPS_DEV_UART , GPS_uart_input); rt_device_write(GPS_DEV_UART, 0, str, (sizeof(str) - 1)); GPS_rcv_thread = rt_thread_create( "listen_uart3", GPS_rcv_thread_entry, RT_NULL, 512, 10, 20); if (GPS_rcv_thread != RT_NULL) rt_thread_startup(GPS_rcv_thread); else return -1; GPS_parse_thread = rt_thread_create( "parse_data", GPS_parse_thread_entry, RT_NULL, 2048, 10, 20); if (GPS_parse_thread != RT_NULL) rt_thread_startup(GPS_parse_thread); else return -1; return RT_EOK; } //线程函数 static void GPS_rcv_thread_entry(void* parameter) { unsigned char ch; rt_err_t ret=-RT_ERROR; while (1) { while (rt_device_read(GPS_DEV_UART , -1, &ch, 1) != 1) { rt_sem_take(&GPS_rx_sem, RT_WAITING_FOREVER); rt_kprintf("reget:%s\r\n",GPS_ur.buf); } GPS_ur.buf[GPS_ur.sta++] = ch; if(ch == '\n') { rt_kprintf("realized \r\n"); rt_kprintf("%s", GPS_ur.buf); GPS_ur.buf[GPS_ur.sta] = '\0'; ret=rt_mq_send(&GPS_mq, &GPS_ur.buf, GPS_ur.sta); if( ret==RT_EOK) rt_kprintf("rt_mq_send SUCEEDE \r\n"); else if(ret==-RT_EFULL) rt_kprintf("rt_mq_send FULL \r\n"); else if(ret==-RT_ERROR) rt_kprintf("rt_mq_send ERROR \r\n"); memset(&GPS_ur,0,sizeof(uart_rcv_typedef)); } rt_thread_mdelay(10); } } static void GPS_parse_thread_entry(void* parameter) { char tmp[128]; while(1) { if (rt_mq_recv(&GPS_mq, &tmp, sizeof(tmp), RT_WAITING_FOREVER) == RT_EOK) { rt_kprintf("get:%s",tmp); } rt_thread_mdelay(10); } } INIT_APP_EXPORT(GPS_thread_start);1. 这里是列表文本
撰写答案
登录
注册新账号
关注者
0
被浏览
1.3k
关于作者
等风来
这家伙很懒,什么也没写!
提问
3
回答
15
被采纳
0
关注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
国产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
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
2
freemodbus主机在freertos的适配,参考rtthread例程
3
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
4
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
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
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部