2、中断屏蔽:虽然中断源提交了“申请报告”,但是,是否得到CPU的响应,还要取决于“申请报告”是否能够通过2道或者3道“关卡”(中断屏蔽)送达CPU(相应的中断屏蔽位等于1,为关卡放行;反之相应的中断屏蔽位等于0,为关卡禁止通行);
3、中断响应:如果一路放行,则CPU响应中断后,将被打断的工作断点记录下来(把断点地址保护到堆栈),挂起“不再受理其他申请报告牌”(清除全局中断标志位GIE=0),跳转到中断服务子程序
4、保护现场:在处理新任务时可能破坏原有的工作现场,所以需要对工作现场和工作环境进行适当保护;
5、调查中断源:检查“申请报告”是由哪个中断源提交的,以便作出有针对性的服务;
6、中断处理:开始对查明的中断源进行有针对性的中断服务;
7、清除标志:在处理完毕相应的任务之后,需要进行撤消登记(清除中断标志),以避免造成重复响应;
8、恢复现场:恢复前面曾经被保护起来的工作现场,以便继续执行被中断的工作;
9、中断返回:将被打断的工作断点找回来(从堆栈中恢复断点地址),并摘下“不再受理其他申请报告牌”(GIE=1),继续执行原先被打断的工作。
1.要注意中断程序的优先级。2.中断子程序尽量短。不要把耗费资源的计算放在中断子程序中,除非是对时间要求非常敏感应用,如电机的FOC算法,才能在中断程序里面之行。
3. 各个中断程序中的处理不要相互冲突,中断是否能嵌套也要小心。
在子程序中用While(一个全局变量){这里执行子程序的 *** 作}要中断时把这个变量设为0,
则那个子程序就退出了.
这里假设你的子程序是个重复反复执行的 *** 作.如果不是,那么你的需求本身就是错的做法你需要重新评估你的设计合理性.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)