楼主最近还看过
中断的组成:中断源,中断服务程序,看门狗等
中断的执行过程:中断源触发中断(存在多个中断源时优先级高的优先)->进入中断服务程序->关闭中断使能->执行中断程序->打开中断使能->中断返回(看门狗一般会在这里看着,中断回不来就强制退出中断)
上述过程在中断服务程序中没有大循环函数的话一个周期就完了,所以你的主程序只是中断那么一下下,其实是瞬间挂起,中断完了会继续刚刚中断发生前的那一瞬间继续运行。
OB30是循环中断,可以理解为定时中断,OB1开始运行,比如2秒进一次中断,进中断的时候会把你OB1的运行情况和状态统统压栈处理,执行完中断出来以后,再进行出栈操作将OB1恢复到进中断之前的状态,然后继续执行OB1,等下个2秒来临重复上述动作。概括一下就是,中断不发生一直执行着OB1,中断发生了暂停OB1去执行中断,执行完中断以后继续执行OB1。所以你的OB30对于OB1来说就是个小插曲。
你理解的那种OB1不运行了,就是你中断服务程序是个死循环,进去以后不出来了,不设看门狗的话中断之后的OB1就不执行了(但不代表扫描周期不扫描,只是不做处理)。配置中断的时候有超时时间,超过这个时间执行不完中断服务程序,那就有可能程序跑飞了,会报错以后退出中断。