标题: UCOSIII在外部中断中使用延时函数会不会引起任务调度 [打印本页]

作者: chao超    时间: 2018-12-12 13:09
标题: UCOSIII在外部中断中使用延时函数会不会引起任务调度
本帖最后由 chao超 于 2018-12-12 13:46 编辑

//外部中断0服务程序
void EXTI0_IRQHandler(void)
{
                OS_ERR err;
          u8 i;
//    CPU_SR_ALLOC();
//          OS_CRITICAL_ENTER();        //进入临界区        
          OSIntEnter();            

        delay_ms(200);        //消抖
               OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);   //延时1s 个人认为应该不会任务切换觉得是中断优先级太高

                OSSemPend(&SYNC_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量  还有就是中断尽量不要使用请求信号量会引起堵塞能不能解释一下
                  if(PF0==0)         
        {
                printf("1111");
                OSSemPost(&SYNC_SEM,OS_OPT_POST_1,&err);//发送信号量
        }
                EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位
//         OS_CRITICAL_EXIT();        //退出临界区

    OSIntExit();            //退出中断

希望有大神解决问题

作者: 51hei团团    时间: 2018-12-14 04:07
搞定了吗?
作者: angmall    时间: 2018-12-14 08:31
通常在中断子程序中是不调用延时子程序的,这样会增加中断处理时间,如果有其它低级中断了,就会延误响应中断了。

所以,中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主程序中查这个标志位,当标志为1时,就在主程序中完成这些任务,这样就不会影响其它中断源的中断,也不会使中断产生混乱。

作者: sz189981    时间: 2018-12-14 11:34
OSSemPend(&SYNC_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);因为一旦信号量暂时没有到,会等待,于是就会引起堵塞
作者: chao超    时间: 2018-12-14 19:39
angmall 发表于 2018-12-14 08:31
通常在中断子程序中是不调用延时子程序的,这样会增加中断处理时间,如果有其它低级中断了,就会延误响应中 ...

是这样的有时候用延时函数也无法避免比如按键中断吧它总得要延时,所以主要是想知道在这种情况下,它会不会有任务切换的可能,如果有的话就得要临界保护了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1