主任务里除了要接收这个定时器发来的定时时间到的消息外,还要接收处理其他的消息,所以用rt_thread_mdelay不太合适
手册中一再强调,定时器里不要有延时的操作,但像我这种应用(需要定时处理一些耗时的事情)应该怎么用定时器 ?
消息队列用错的问题,我们自己定义了一个固定的消息结构:
typedef struct
{
UINT8 msgID ;
UINT32 msgParam1;
UINT32 msgParam2;
}taskMsg , *ptaskMsg ;
// 定时器里发送消息:
static rt_err_t _send_mq_msg( rt_mq_t mq , UINT8 id, UINT32 p1, UINT32 p2)
{
taskMsg msg = {0x00};
//_ASSERT( !mq );
if( !mq ) return -1 ;
msg.msgID = id ;
msg.msgParam1 = p1 ;
msg.msgParam2 = p2 ;
return rt_mq_send( mq , (void *) &msg, sizeof(taskMsg) );
}
主任务申请消息队列:
if( _mq ) rt_mq_delete( _mq );
_mq = rt_mq_create("mq", sizeof(taskMsg), 8, RT_IPC_FLAG_FIFO );
_ASSERT( !_mq );
主任务等待消息队列:
while(1)
{
if( RT_EOK ==
rt_mq_recv( _mq , (void *)&msg, sizeof(taskMsg), rt_tick_from_millisecond(1000)))
{
....
}
}
主任务里除了要接收这个定时器发来的定时时间到的消息外,还要接收处理其他的消息,所以用rt_thread_mdelay不太合适
手册中一再强调,定时器里不要有延时的操作,但像我这种应用(需要定时处理一些耗时的事情)应该怎么用定时器 ?
消息队列用错的问题,我们自己定义了一个固定的消息结构:
typedef struct
{
UINT8 msgID ;
UINT32 msgParam1;
UINT32 msgParam2;
}taskMsg , *ptaskMsg ;
// 定时器里发送消息:
static rt_err_t _send_mq_msg( rt_mq_t mq , UINT8 id, UINT32 p1, UINT32 p2)
{
taskMsg msg = {0x00};
//_ASSERT( !mq );
if( !mq ) return -1 ;
msg.msgID = id ;
msg.msgParam1 = p1 ;
msg.msgParam2 = p2 ;
return rt_mq_send( mq , (void *) &msg, sizeof(taskMsg) );
}
主任务申请消息队列:
if( _mq ) rt_mq_delete( _mq );
_mq = rt_mq_create("mq", sizeof(taskMsg), 8, RT_IPC_FLAG_FIFO );
_ASSERT( !_mq );
主任务等待消息队列:
while(1)
{
if( RT_EOK ==
rt_mq_recv( _mq , (void *)&msg, sizeof(taskMsg), rt_tick_from_millisecond(1000)))
{
....
}
}
举报