初级会员 
  
	- 积分
 - 168
 
        - 金钱
 - 168 
 
       - 注册时间
 - 2017-8-9
 
      - 在线时间
 - 36 小时
 
 
 
 | 
 
1金钱 
我用UCOSIII软件定时器来防止遥控器按键连按。 
遥控器接收到信息后,就会开启软件定时器, 
为此,我还用了LED灯来验证定时器是否打开。 
结果发现定时器回调函数不能执行, 
必须在启用定时器前先进行至少500Ms是系统延时才能正常执行回调函数。 
请问大家有没有遇到类似的情况,望解答! 
 
 
void remote_task(void *p_arg) 
{ 
    OS_ERR err; 
    p_arg = p_arg; 
    while(1) 
    { 
        Remote_Scan(); 
        delay_ms(500);                 //必须在此处进行延时操作 
//        TIM4->DIER|=1<<4;       //允许捕获中断 
//        TIM4->DIER|=1<<0;       //允许更新中断         
        OSTmrStart(&tmr1,&err);    //开启定时器1 
        OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err); //延时500ms 
    } 
} 
void tmr1_callback(void *p_tmr, void *p_arg)      //回调函数 
{ 
    LED0=~LED0; 
    LED1=0; 
    TIM4->DIER|=1<<4;       //允许捕获中断 
    TIM4->DIER|=1<<0;       //允许更新中断  
} 
延时后定时器能执行,说明初始化啥的都没写错,就是不知道问题出现在哪里。 
 
 
这是初始化构建任务: 
 
OSTmrCreate((OS_TMR        *)&tmr1,         
                (CPU_CHAR    *)"tmr1",         
                (OS_TICK     )40,            //延时   
                (OS_TICK     )0,                        
                (OS_OPT         )OS_OPT_TMR_ONE_SHOT,     //单次定时器 
                (OS_TMR_CALLBACK_PTR)tmr1_callback,    //定时器1回调函数 
                (void        *)0,             
                (OS_ERR        *)&err);                          
 
 
 |   
 
 
 
 
 
 |