完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近看到中断这块,有一处不太理解,希望大家能指点一下。
比如我现在有一个外部中断0的中断函数 这个函数每次延迟50ms 我想实现就是每过10s中让蜂鸣器响一下 我想知道我在调用beep()这个蜂鸣器的函数中不影响此中断么 就比如我这个beep里面有delay(100)这样的 那岂不是我每调用 一次就会有这么多的误差吗 void t0() interrupt 1 { if(++count==200) { beep(); count=0; } } |
|
相关推荐
12个回答
|
|
好像是这样,如果不退出中断,应该不会再响应同一个中断,所以在中断里尽量避免用延时类函数。
这类情况的处理应该是在定时中断里开启或关闭蜂鸣器,蜂鸣器的开启时间最好是定时器溢出时间的倍数,通过状态标志来判断应该是开启,还是关闭蜂鸣器。 |
|
|
|
人中狼 发表于 2017-7-17 13:57 实际上根据我的实验效果看 只要delay函数不超过interrupt函数的时间就没有问题 当delay函数在执行++操作时 中断函数并没有被delay打断 而是按照他原来自己的时钟执行 所以我初步判断只要delay函数的时间小于 中断这个程序就不会有错,但是应该把delay时间调短一点 要不然就失去了中断节省CPU的意义了 中断函数并不是执行到delay就把自己的模式中断 简而言之他们是两个完全独立的 只有当中断溢出的时候才会中断CPU当前操作。 不知道我想的对不对 |
|
|
|
人中狼 发表于 2017-7-17 13:57 实际上根据我的实验效果看 只要delay函数不超过interrupt函数的时间就没有问题 当delay函数在执行++操作时 中断函数并没有被delay打断 而是按照他原来自己的时钟执行 所以我初步判断只要delay函数的时间小于 中断这个程序就不会有错,但是应该把delay时间调短一点 要不然就失去了中断节省CPU的意义了 中断函数并不是执行到delay就把自己的模式中断 简而言之他们是两个完全独立的 只有当中断溢出的时候才会中断CPU当前操作。 不知道我想的对不对 |
|
|
|
是的,因为beep里延时的存在对你中断函数是绝对有影响的。不能仅仅根据实际效果好像没啥大问题就放任不管,养成习惯了以后迟早要吃亏。
【玩】蜂鸣器连叫 https://bbs.elecfans.com/jishu_514253_1_1.html (出处: 中国电子技术论坛) 这是我以前发的一个蜂鸣器的帖子,也是利用定时器实现蜂鸣器的叫的,你可以参考一下。 |
|
|
|
|
|
|
|
你理解的基本正确,假设的例子不可能,什么定时器中断能长达500ms,12M时钟最长只能65ms,中断程序耗时过长也不符合使用中断的原则。在实际应用中常会使用中断嵌套,很有可能发生冲突。 |
|
|
|
如果你有2个中断在进行任务操作,中断本身的目的就是为了快速响应。如果高优先级的中断先中断了,结果进去以后来个delay延时,恰巧低优先级的任务需要执行,那这效率就大打折扣了。 |
|
|
|
还有啊,中断里加延时也会导致你的超级大循环的效率降低,比方说你在主函数里用延时做个闪灯,由于中断延时的问题,主函数的闪灯时间也将变得不可确定。 当然如果你觉得这些都是假设,那就按照自己的理解来。 |
|
|
|
中断是用来处理特殊情况,非特定规律情况的,在中断里除了做一些必要的操作外,都是设置一些状态标志,然后返回主程序,由主程序做相应的处理。
在简单的项目里,中断占用资源的弊端不明显,甚至会另程序简化,编程简单,但是在较大的项目里就会出现问题,如当外部中断源多于中断端口时,一个中断端口需要判断多个中断源。如在中断中做必要操作后,在主程序里仍需做大量的提示,记录等系列操作,这些情况都需要中断程序占用资源越少越好。 |
|
|
|
谢谢大家的回复
昨天和今天早上又看了看并且自己也调试了几番 的确wulin兄弟说延时最多是65ms 我说的那个例子没有考虑到。 harry说的会导致循环效率降低 的确是..而且会让闪烁时间比如本来是1s 但是加了个延时 就肯定不是1s了 人中狼说加状态标志 昨天我也看到了有些人这么说 当时不太明白 现在大概理解了一些 总之就是不要在中断里出现过多操作.. |
|
|
|
刚刚我在自己仿真时发现
即便是你的中断是只有3 4个基本语句 但实际上仍然做不到精准延时 因为假设你的定时器是1ms 你每1000ms让灯亮一下 那么3 4个基本语句的 有8个左右的机械周期 这部分会*1000的放大 这个误差也是不小的 在我的例子中 实际上这个灯是1010ms亮一下 还需要进行一些补偿 才可以做到精准定时。 这个补偿也是我自己脑补出来的 没想到上网一搜还真有这么个东西.. |
|
|
|
不错,很好的经验分享,辛苦麻烦了,欠缺这方面的资料,非常感谢。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
imx6ull裸机编程,使用宏定义无法驱动,使用指针就可以驱动
227 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十二章 音频FFT实验
186 浏览 0 评论
飞凌嵌入式ElfBoard EL 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用
1243 浏览 0 评论
stc15f2k60s2利用串口传输字模存储到eeprom并进行点阵显示
1567 浏览 1 评论
1540 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11607 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 06:19 , Processed in 0.931671 second(s), Total 95, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号