ucos 外部中断去抖

2019-07-21 06:54发布

ucos的心跳是10ms,中断中不能用OSTimeDly().然后自己写了个延时。
void my_delay(u16 n)    //大约1ms 延时,软件仿真测的
{
 u16 i,j;
 for(i=n;i>0;i--)
   for(j=0;j<90000;j++)
      ;
}
但是容易死在中断里,也不知到为什么
查过有外接电容的,但现在硬件没办法改。所以问下有没有其他办法了??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
正点原子
1楼-- · 2019-07-21 07:00
可以用我们战舰提供的SYSTEM文件夹,直接支持ucosii下面调用delay_ms和delay_us.
qq371833846
2楼-- · 2019-07-21 10:29
 精彩回答 2  元偷偷看……
Alexinx
3楼-- · 2019-07-21 13:59
回复【3楼】qq371833846:
---------------------------------
谢谢,这个回头试一下
Alexinx
4楼-- · 2019-07-21 19:35
回复【2楼】正点原子:
---------------------------------
中断里调用OSTimeDly会引起hardfault。
科科1987
5楼-- · 2019-07-22 00:05
回复【6楼】科科1987:
---------------------------------
可能你的os移植有问题。
我的可以在中断调用delay_ms的。
正点原子
6楼-- · 2019-07-22 02:07
回复【7楼】正点原子:
---------------------------------
原子哥,我用的就是你的例程修改过来的,移植的部分从没有修改过。
void TIM3_IRQHandler(void)   //TIM3中断
{  
    OSIntEnter(); 
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 
    {
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源 
        OSTimeDlyHMSM(0,0,0,1);//运行若干次后,就会进入hardfault。如果去掉这句的话就会正常运行。
        //delay_us(1000);//加这句没问题,因为delay_us里没有用到OSTimeDly。 
        LED1=!LED1;
    }
    OSIntExit();  
}

一周热门 更多>