想问下定时器回调函数是否是在每次定时器时间到了时候才会被调用。
[mw_shl_code=c,true]void tmr1_callback(void *p_tmr,void *p_arg)
{
u8 *pbuf;
static u8 msg_num;
OS_ERR err;
pbuf = mymalloc(SRAMIN,10);
if(pbuf)
{
msg_num++;
sprintf((char*)pbuf,"ALIENTEK %d",msg_num);
OSTaskQPost((OS_TCB* )&Msgdis_TaskTCB,
(void* )pbuf,
(OS_MSG_SIZE)10,
(OS_OPT )OS_OPT_POST_FIFO,
(OS_ERR* )&err);
if(err != OS_ERR_NONE)
{
myfree(SRAMIN,pbuf);
OSTmrStop(&tmr1,OS_OPT_TMR_NONE,0,&err);
tmr1sta = !tmr1sta;
LCD_ShowString(40,150,100,16,16,"TMR1 STOP! ");
}
}
}[/mw_shl_code]
当Msgdis_TaskTCB中的4个内建消息队列满后,OSTaskQPost((OS_TCB* )&Msgdis_TaskTCB出错,然后进入if(err != OS_ERR_NONE)释放内存并关闭定时器,这时候,定时器关闭了应该不会在进入这个回调函数里面了吧?所以msg_num这个变量应该只会自加到4啊,可是看视频,在内存释放的过程中msg_num还是会自加,一直加到8.想问下这块应该怎么理解?释放内存的时候定时器到底关闭了没?回调函数在什么情况下会进入?谢谢回答的人啦
|