不用定时器用接收超时做超时处理
- [原始代码 ]
while (1)
{
/* 接收感兴趣的事件WRITE_EVENT,以永久等待方式去接收 */
if (rt_event_recv(recvdata_event, WRITE_EVENT, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, &set) != RT_EOK)
continue;
do
{
/* 接收感兴趣的事件WRITE_EVENT,以1000ms超时方式接收 */
if (rt_event_recv(recvdata_event, WRITE_EVENT, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, rt_tick_from_millisecond(1000), &set) == RT_EOK)
{
/* 判断写入的数据大小到没到所设置的ringbuffer的阈值 */
if (rt_ringbuffer_data_len(recvdatabuf) > THRESHOLD)
{
/* 到阈值就直接写数据 */
recvdatafile_p0 = fopen("recvdata_p0.csv", "ab+");
if (recvdatafile_p0 != RT_NULL)
{
while(rt_ringbuffer_data_len(recvdatabuf))
{
size = rt_ringbuffer_get(recvdatabuf, (rt_uint8_t *)writebuffer, THRESHOLD);
fwrite(writebuffer, 1, size, recvdatafile_p0);
}
fclose(recvdatafile_p0);
}
}
/* 阈值没到就继续接收感兴趣的事件WRITE_EVENT,以1000ms超时方式接收 */
continue;
}
/* 1000ms到了,还没有收到感兴趣的事件,这时候不管到没到阈值,直接写 */
recvdatafile_p0 = fopen("recvdata_p0.csv", "ab+");
if (recvdatafile_p0 != RT_NULL)
{
while(rt_ringbuffer_data_len(recvdatabuf))
{
size = rt_ringbuffer_get(recvdatabuf, (rt_uint8_t *)writebuffer, THRESHOLD);
fwrite(writebuffer, 1, size, recvdatafile_p0);
}
fclose(recvdatafile_p0);
}
} while(0);
}
- [ 少了两行代码]
while (1)
{
do
{
/* 接收感兴趣的事件WRITE_EVENT,以1000ms超时方式接收 */
if (rt_event_recv(recvdata_event, WRITE_EVENT, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, rt_tick_from_millisecond(1000), &set) == RT_EOK)
{
/* 判断写入的数据大小到没到所设置的ringbuffer的阈值 */
if (rt_ringbuffer_data_len(recvdatabuf) > THRESHOLD)
{
/* 到阈值就直接写数据 */
recvdatafile_p0 = fopen("recvdata_p0.csv", "ab+");
if (recvdatafile_p0 != RT_NULL)
{
while(rt_ringbuffer_data_len(recvdatabuf))
{
size = rt_ringbuffer_get(recvdatabuf, (rt_uint8_t *)writebuffer, THRESHOLD);
fwrite(writebuffer, 1, size, recvdatafile_p0);
}
fclose(recvdatafile_p0);
}
}
/* 阈值没到就继续接收感兴趣的事件WRITE_EVENT,以1000ms超时方式接收 */
continue;
}
/* 1000ms到了,还没有收到感兴趣的事件,这时候不管到没到阈值,直接写 */
recvdatafile_p0 = fopen("recvdata_p0.csv", "ab+");
if (recvdatafile_p0 != RT_NULL)
{
while(rt_ringbuffer_data_len(recvdatabuf))
{
size = rt_ringbuffer_get(recvdatabuf, (rt_uint8_t *)writebuffer, THRESHOLD);
fwrite(writebuffer, 1, size, recvdatafile_p0);
}
fclose(recvdatafile_p0);
}
} while(0);
}
少的两行,其实是同步线程用的;不然线程隔固定时间运行;
如果,感到此时的自己很辛苦,那告诉自己:容易走的都是下坡路。坚持住,因为你正在走上坡路,走过去,你就一定会有进步。如果,你正在埋怨命运不眷顾,开导自己:命,是失败者的借口;运,是成功者的谦词。命运从来都是掌握在自己的手中,埋怨,只是一种懦弱的表现;努力,才是人生的态度。

浙公网安备 33010602011771号