初级会员
- 积分
- 166
- 金钱
- 166
- 注册时间
- 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);
|
|