定时器问题请教
z-stack mesh 1.0 的ED中,我想控制一候蜂鸣器的发声,需要先发起动命令,延迟一段时间再关掉,类似LED闪烁控制的方法,
//发声控制
HalLcdBeep(...){
...
osal_set_event (Hal_TaskID, HAL_LCD_BEEP_EVENT);
}
//事件处理中新增
if ( events & HAL_LCD_BEEP_EVENT )
{
HalLcdBeepUpdate();
return events ^ HAL_LCD_BEEP_EVENT;
}
//HalLcdBeepUpdate中根据全局变量的状态,打开、关闭声音后通过定时器进入下一步处理
void HalLcdBeepUpdate(void){
if(t1){
HalLcdSoundOn();
......
osal_start_timerEx(Hal_TaskID, HAL_LCD_BEEP_EVENT,t1)
}
if(t2){
HalLcdSoundOff();
......
}
}
现在问题是,1分钟内工作正常,超过1分钟后 osal_start_timerEx(Hal_TaskID, HAL_LCD_BEEP_EVENT,t1)无法再触发事件,导至声音打开后无法关闭,不管PWWER_SAVING设置与否都是这样,最后不得已,将控制放在主循环中,在HalLcdBeepUpdate进行Ticks计数,根据HalLcdBeepUpdate返回值决定是否清理此任务
if ( events & HAL_LCD_BEEP_EVENT )
{
if(HalLcdBeepUpdate())
return events;
return events ^ HAL_LCD_BEEP_EVENT;
}
请教下上述定时器为什么工作不正常? 因为与POWER_SAVING无关,所以增加调用osal_pwrmgr_task_state(Hal_TaskId,PWWER_HOLD) 无效