首页 > 代码库 > pic中断特别说明

pic中断特别说明

在调试产品W660-MODBUS过程中发现,程序工作在偶然情况下会工作异常,经过将近一个礼拜的追踪,发现PIC中断有一下两个怪异特性:

  • 在刚进入中断时就应该清除中断标志,如果在最后返回之前才清除标志,会导致同一个中断嵌套进入。但是只有低优先级中断会存在这个情况。当低优先级中断刚进入时,没有清除中断标志--高优先级中断发生,打断低优先级中断--高优先级中断结束--返回至被打断的低优先级中断,但是此时如果低优先中断标志没有被清除,而且此时被打断的低优先级中断条件再一次满足,则此时会从头先执行新发生的中断,此中断结束后再接着执行被打断的中断。这会导致同一个中断嵌套进入,导致被保存的变量丢失。
  • 在中断服务程序中不能软件使能中断。在进入中断服务程序时,PIC内部会禁止中断,高优先级中断会自动清除高优先级使能标志,低优先级中断会自动清除低优先级使能标志。在中断结束后,PIC内部又会自动设置中断使能标志。如果在服务程序中手动设置高优先级使能标志会导致程序异常。(表现之一:中断服务程序进入之前保存的变量值会被覆盖,跟同一中断嵌套的造成的异常类似)

pic中断特别说明