洋桃技术支持0002:中断函数调用冲突问题
【洋桃技术支持】编号0002:中断函数调用冲突问题
提问:
杜老师,我的程序进入到中断之后,执行完一次中断就不返回主函数了,请问这是什么原因呢?
问题的扩展:
在开启中断函数后 (下图中的NVIC_Configuration函数),程序编译正常,但在单片机上运行时则会发生各种未知的错误。关掉中断后错误消失。这种因开启中断而产生的错误是什么原因导致的?
解答:
关于中断函数出错的问题,有很多可能的原因。比如中断重复触发、函数嵌套错误、中断向量控制器设置错误、电路设计问题等。
在使用洋桃开发板做中断实验的案例中,因为使用了洋桃现有硬件,可排除因电路设计导致的问题。如果是使用了洋桃的示例程序,也可以排除中断向量控制器设置错误的问题。这里要注意:如果您不是用我们的洋桃1号开发板,不是用我们的示例程序,则需要注意这两处问题。最后可能的就是中断重复触发、函数嵌套错误问题。
1,中断重复触发问题
重复触发一般出现在外部电平触发的情况,比如我们设置某一个IO接口在低电平时触发中断,当接口为低电平后,中断触发。可是中断处理函数执行完成退出后,外部接口还是低电平,这时又会再一次进入中断处理函数,只要低电平不离开,中断就会一直循环。给开发者的感觉就是中断不能退回到主函数的假象。
解决这个问题可以通过在中断触发后断开触发源,也就是让接口强制拉高,这样观察中断是否回到主函数。对于这种问题最好的方法就是把IO接口设置为使用“上升沿”或“下降沿”触发,这样可以保证只有接口从高到低电平,或从低到高电平的一瞬间触发,而在电平稳定在高或低的时候不重复触发。
2,函数嵌套错误问题
函数嵌套错误也是常见的问题。导致这种问题的原因是在主函数和中断处理函数里面都调用了同一个子函数。例如在主函数中调用了延时函数,而中断处理函数中也调用了延时函数。这时编译器就会报错,即使可以通过编译,程序也不能正常工作。因为在主函数中当程序执行到延时函数的时候触发了中断,那么中断处理函数又调用了一次延时函数,这时主函数中的延时函数的寄存器数据就会被中断处理函数中延时函数所替换。当程序回到主函数继续执行原来的延时函数时,其延时数据都是错误的,是被中断替换的错误数据。这会导致不可预知的问题。
解决方法是不要让主函数和中断处理函数调用同一个子函数。如果中断函数想用延时函数,那就专门为它写一个独立的延时函数。在洋桃1号开发板的示例程序中延时函数是使用嘀嗒定时器做计时的,如果要给中断处理函数加延时,可以独立写一个采用定时器2/3/4计时的延时函数,不要使用同一个定时器。假如是主函数与中断处理函数都要修改一组寄存器数据,可以在进入中断函数时,用程序把这组数据先复制到另一个不被修改的寄存器中,然后在退出中断处理程序时再把数据复制回原寄存器。这样就不会导致数据错乱了。
以上是我个人经验所总结的问题,可能在实践中还会有新的问题和原因,欢迎大家向我反馈,我会整理成技术支持文档,帮助更多人解决问题。谢谢。
洋桃技术支持0002:中断函数调用冲突问题相关推荐
- 洋桃技术支持0006:开发板上电扬声器有杂音怎么办?
洋桃技术支持0006:开发板上电扬声器有杂音怎么办? 提问: 洋桃1号开发板插入USB线后运行出厂程序,这时我发现扬声器里发出吱吱的电流声.这样正常吗?是质量问题吗? 解答: 首先说明,出现电流声是正 ...
- 洋桃技术支持0004:注释信息出现乱码如何解决?
洋桃技术支持0004:注释信息出现乱码如何解决? 提问: 杜老师,我复制洋桃教学视频中示例程序的代码,但注释信息本应显示中文的地方变成了乱码,这是什么原因? 解答: 由于KEIL是英国公司研发的,他们 ...
- 洋桃技术支持0005:洋桃1号开发板上电不运行如何解决?
洋桃技术支持0005:洋桃1号开发板上电不运行如何解决? 提问: 我购买的洋桃1号开发板,之前一直用的好好的,但今天插上电源发现没有反应,但核心板上的ASP指示灯是亮的.这是什么原因? 解答: 导致洋 ...
- 洋桃技术支持0001:GPIO驱动12864液晶屏需要注意哪些事项?
[提问]请问洋桃1号开发板的GPIOB端口要使用的话,硬件上和软件上需要注意什么?我想用STM32上的GPIOB端口控制点亮一个20口的12864液晶屏? 解答: [方法论] 1,解决这个问题的方法是 ...
- windows7系统损坏修复_【软件资讯】还在用win7?微软Windows 7系统正式停止技术支持...
本文转自IT之家,作者玄隐. 早在2015年1月,微软结束了对Windows 7的主流支持,该公司停止向旧操作系统添加新功能.微软将Windows 7从主流支持转移到扩展支持.2020年1月14日,今 ...
- CVTE【嵌入式应用开发】【软件技术支持】面经【已拿offer】
[嵌入式应用开发]技术一面(30min) 1.面试官主动介绍了CVTE 2.画I2C时序图 3.聊一下项目.项目的难点,怎么解决 4.手撕代码:将字符串中的小写字母挑出来 5.问对加班有什么看法 (有 ...
- metalink--Oracle的官方技术支持站点
原文链接是百度的http://baike.baidu.com/view/2401614.htm,在此备份 Metalink是Oracle的官方技术支持站点,Oracle公司通过该网站来支持全球的客户, ...
- CROSS联合主办加密艺术链上展《道的3次方》将于5月7日开幕,HECO提供底层技术支持
全球大型加密艺术链上展<道的3次方>将于5月7日开幕,展览长达23天,持续至5月30日.该展览由加密艺术平台HNFT Gallery发起,中央美院国际学院学术团队支持,HECO Chai ...
- 净网先锋杀啦卡巴斯基,并且还..(与净网先锋技术支持客服对话)
净网先锋杀啦卡巴斯基,并且还..(与净网先锋技术支持客服对话) 净网先锋下载地址http://groups-beta.google.com/group/sys-fans/web/jw.rar 卡巴斯基 ...
最新文章
- 泪目!兰大硕导的《致谢》火了:我从来不曾优秀过,也从来不曾放弃过!
- 敏捷个人2012.8月份线下活动报道:Toastmasters、团队管理
- 近世代数--群--怎么判断是不是群?
- 消息摘要算法示例(python和go)
- PyCharm——turtle库的画布悬停解决方案
- JAVA基本数据类型、数据类型转换
- postman raw带文件_postman raw模拟各种http post请求
- linux command read the content,Linux while 和 read 的用法
- Lesson 4 Part 2 Softmax Regression
- mac怎么装java eclipse_如何在Mac系统安装eclipse并运行java程序
- 用户关闭浏览器页器,弹出一个提示
- [Spark]如何设置使得spark程序不输出 INFO级别的内容
- 设置eclipse主题
- Springboot 基础6 - Redis实战
- apollo决策规划学习--慢速障碍物超车
- SaaS 公司融资的「22条军规」
- MuJoCo及mujoco_py安装(以及troubleshooting)
- Uboot DM9621网卡移植之路
- 微机原理之8255和8253的初始化
- 3Com控股华为3Com 合资公司将面临新轮调整