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

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

最新文章

  1. 构建自己的 Linux 发行版
  2. springmvc对同名参数处理-我们到底能走多远系列(44)
  3. delphi SPCOMM串口控件
  4. Flex 远程加载crossdomain.xml 解决
  5. java:类集框架
  6. IOS 学习教程
  7. SDUT 3258 Square Number 简单数学
  8. jquery ajax return值不能取得的解决方案
  9. Java基础知识强化之网络编程笔记09:TCP之客户端键盘录入服务器写到文本文件中
  10. Qt入门之基础篇(1):Qt4及Qt5的下载与安装
  11. StarUML配置Word生成文档模板
  12. js 数据加载loading封装
  13. angularjs优化方略
  14. 全网最详细的MyEclipse里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(图文详解)
  15. javascript 回到顶部
  16. 打开MSSQL 2008 R2的时候,展开数据库都显示以下的错误提示: 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)
  17. 【AtCoder】CODE FESTIVAL 2017 qual B
  18. Python nose单元测试框架的安装与使用
  19. cplex-Java-样例代码解析
  20. C++ Primer 5th 第19章 特殊工具与技术

热门文章

  1. Java基础——选择排序、冒泡排序
  2. UWP 读取XML文件
  3. js数组定义、属性及方法(push/pop/unshfit/shfit/reverse/sort/slice/splice/indexOf/lastIndexOf)
  4. (转载)Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow
  5. 腾讯测试工程师:你以为会打LOL就能做测试了?
  6. Codeforces Round #499 (Div. 2) D. Rocket_交互题_二分
  7. React高级指南
  8. MATLAB解析PFM格式图像
  9. vue自定义一个过滤器
  10. 洛谷 P3912 素数个数