求助关于中断和主程序处理逻辑的问题

2019-07-21 06:38发布

先贴上代码[mw_shl_code=applescript,true]int main()
{
        while(1)
        {
                函数1()
                        {
                                语句1;
                                语句2;

                                语句3;
                                语句4;
                                语句5;                               
                        }
        }
}[/mw_shl_code]

假如说,我正在处理函数1,运行到了语句2,这个时候,收到了一个中断的信号,程序跳转到中断中去,处理中断命令,但是处理这个信号的函数2耗时很长,不能放在中断服务函数里去,就只在中断服务函数里放了一个标志位。
但是我想用最快的速度去处理这个中断的标志位,就是去处理函数2,至于函数1的语句345,我就不运行了
我现在的想法是,直接在语句2的的后边放一个判断中断标志位的语句,判断正确,直接return 函数2。
不知道我这个想法可行不,这只是个假设,语句那么多,每一句下边放一个判断和return,也不合适。或者有没有其他更好的方法。
大家有什么指教的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
likunxue
1楼-- · 2019-07-21 10:24
本帖最后由 likunxue 于 2018-12-20 00:28 编辑

如果你的程序是基于操作系统的,这个非常好做, 也不会出错,否则这个做好只能调用几个低级的汇编语句来完成,因为中断后,CPU自动会转到中断前没有运行完的哪里继续工作,你可以把你的函数2的函数名,其实就是函数指针,付给PC指针,人为的修改程序的运行路径,但风险很大,当然如果你的程序处理简单,也可以全部放到中断里去做,把耗时很长部分离出来,比如延时,用计数周期来处理,等待用判断标志来决定,这样,你做一个任务变量,每次进入中断后按这个任务变量来决定运行哪一段代码,一般简单的程序,我工程中也经常用这种方法,处理得很好,当然条件是全部变量你都得用全局变量来实现。 你先试着按我说的方法去自已处理,如果不行,我再给你提供参考示例。但我希望你能自行完成,因为能把这个玩转了,你对CPU的低层也了解得差不多了    笑,加油
warship
2楼-- · 2019-07-21 14:02
你的函数2在哪里? 是语句3、4、5吗?
你的意思是只要发生了中断,就无须执行语句3、4、5吗?
warship
3楼-- · 2019-07-21 19:39
本帖最后由 warship 于 2018-12-19 21:31 编辑

给你写一个参考一下:
int main()
{   
   初始化语句;
    for(;;){   

   while(1)
    {
        语句1;
        语句2;
        if(Flag==1)
            {
              长时处理数据语句;   //可以独立写成一个函数调用  
               Flag=0;  //清中断标志  
              break;}
         语句3;
         语句4;
         语句5;               
      }
   }
}


一周热门 更多>