|
发表于 2018-10-25 07:52:00
|
显示全部楼层
楼主的问题解决了吗?
现在我也碰到了这个问题。
这个是我的处理方式
rt_uint8_t gps_stack[1024];
struct rt_thread gps_thread;
rt_uint8_t GPS_timeflag=0;
rt_uint8_t GPS_stateflag=0;
rt_uint16_t GPS_timeCnt=0;
struct gps_rx_msg
{
rt_device_t dev;
rt_size_t size;
};
static struct rt_messagequeue gps_rx_mq;
static unsigned char gps_rx_buffer[1024];
static unsigned char gps_msg_pool[1024];
rt_err_t gps_input(rt_device_t dev, rt_size_t size)
{
struct gps_rx_msg msg;
msg.dev = dev;
msg.size = size;
rt_mq_send(&gps_rx_mq, &msg, sizeof(struct gps_rx_msg));
return RT_EOK;
}
void gps_thread_entry(void* parameter)
{
uint8_t gpspow_openstate=0;
struct gps_rx_msg msg;
rt_device_t device;
rt_err_t result = RT_EOK;
device = rt_device_find(GPS_USE_UART);
if (device!= RT_NULL)
{
rt_device_set_rx_indicate(device, gps_input);
if(rt_device_open(device, RT_DEVICE_OFLAG_RDWR|RT_DEVICE_FLAG_INT_RX)== RT_EOK)
;
else
rt_kprintf("Open GPS %s false!\r\n",GPS_USE_UART);
}
else
rt_kprintf("Find GPS %s false!\r\n",GPS_USE_UART);
while(1)
{
result = rt_mq_recv(&gps_rx_mq, &msg, sizeof(struct gps_rx_msg), 10);
if (result == -RT_ETIMEOUT)
{
}
if (result == RT_EOK)
{
rt_uint32_t rx_length;
rx_length = (sizeof(gps_rx_buffer) - 1) > msg.size ? msg.size : sizeof(gps_rx_buffer) - 1;
rx_length = rt_device_read(msg.dev, 0, &gps_rx_buffer[0],rx_length);
gps_rx_buffer[rx_length] = '\0';
rt_kprintf("%s",gps_rx_buffer);
}
}
}
void gps_app_init(void)
{
rt_thread_t thread ;
rt_err_t result;
result = rt_mq_init(&gps_rx_mq, "mqt", &gps_msg_pool[0], 128 - sizeof(void*), sizeof(gps_msg_pool), RT_IPC_FLAG_FIFO);
if (result != RT_EOK)
{
rt_kprintf("init message queue failed.\n");
return;
}
thread = rt_thread_create("gps",
gps_thread_entry, RT_NULL,
4096, 25, 100);
if (thread != RT_NULL)
rt_thread_startup(thread);
}
原来在103库函数正常使用的,现在使用L476 HAL库就不行了。
大家一起探讨一下。 |
|