原来项目使用sim800c模块,使用AT直接控制进行数据传输,最近项目增量了GPS功能,运行一会就提升这个错误:
(rt_object_get_type(&dev->parent) == RT_Object_Class_Device) assertion failed at function:rt_device_read, line number:366
主进程直接就死掉了,其他线程还正常。
这个时什么原因??
下面时GPS的主要代码:
//回调函数
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)
{
struct gps_rx_msg msg;
rt_device_t device;
rt_err_t result = RT_EOK;
uint8_t gpspow_openstate=0;
uint16_t length=0;
uint16_t rx_length=0;
//查找设备
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!
“,GPS_USE_UART);
}
else
rt_kprintf(“Find GPS %s false!
“,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)
{
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);
if((length+rx_length) > sizeof(gps_buffer))
{
length=0;
rx_length=0;
}
else
{
strncat(gps_buffer,gps_rx_buffer,rx_length);
memset(gps_rx_buffer, 0, sizeof(gps_rx_buffer) );
length += rx_length;
if(gps_buffer[0]!=’$’)
{
length=0;
rx_length=0;
}
}
}
}
}