[问答] 定时器中断函数内调用其他函数的时间问题

[复制链接]

实习生

发表于 2017-7-17 13:37:55   372 查看 11 回复 显示全部楼层 倒序浏览
分享
最近看到中断这块,有一处不太理解,希望大家能指点一下。
比如我现在有一个外部中断0的中断函数
这个函数每次延迟50ms
我想实现就是每过10s中让蜂鸣器响一下
我想知道我在调用beep()这个蜂鸣器的函数中不影响此中断么
就比如我这个beep里面有delay(100)这样的 那岂不是我每调用
一次就会有这么多的误差吗
void t0() interrupt 1
{
        if(++count==200)
       {
               beep();
               count=0;
       }
}

高级工程师

发表于 2017-7-17 13:57:22  
好像是这样,如果不退出中断,应该不会再响应同一个中断,所以在中断里尽量避免用延时类函数。
这类情况的处理应该是在定时中断里开启或关闭蜂鸣器,蜂鸣器的开启时间最好是定时器溢出时间的倍数,通过状态标志来判断应该是开启,还是关闭蜂鸣器。
回复

点赞 举报

实习生

发表于 2017-7-17 14:57:29    楼主|

PCB在线计价下单

板子大小:

cm
X
cm

层数:

2

板子数量:

10

厚度:

1.6
人中狼 发表于 2017-7-17 13:57
好像是这样,如果不退出中断,应该不会再响应同一个中断,所以在中断里尽量避免用延时类函数。
这类情况的处理应该是在定时中断里开启或关闭蜂鸣器,蜂鸣器的开启时间最好是定时器溢出时间的倍数,通过状态标志来判断应该是开启,还是关闭蜂鸣器。 ...

实际上根据我的实验效果看
只要delay函数不超过interrupt函数的时间就没有问题
当delay函数在执行++操作时 中断函数并没有被delay打断
而是按照他原来自己的时钟执行 所以我初步判断只要delay函数的时间小于
中断这个程序就不会有错,但是应该把delay时间调短一点 要不然就失去了中断节省CPU的意义了
中断函数并不是执行到delay就把自己的模式中断 简而言之他们是两个完全独立的
只有当中断溢出的时候才会中断CPU当前操作。 不知道我想的对不对
回复

点赞 举报

实习生

发表于 2017-7-17 14:57:30    楼主|
人中狼 发表于 2017-7-17 13:57
好像是这样,如果不退出中断,应该不会再响应同一个中断,所以在中断里尽量避免用延时类函数。
这类情况的处理应该是在定时中断里开启或关闭蜂鸣器,蜂鸣器的开启时间最好是定时器溢出时间的倍数,通过状态标志来判断应该是开启,还是关闭蜂鸣器。 ...

实际上根据我的实验效果看
只要delay函数不超过interrupt函数的时间就没有问题
当delay函数在执行++操作时 中断函数并没有被delay打断
而是按照他原来自己的时钟执行 所以我初步判断只要delay函数的时间小于
中断这个程序就不会有错,但是应该把delay时间调短一点 要不然就失去了中断节省CPU的意义了
中断函数并不是执行到delay就把自己的模式中断 简而言之他们是两个完全独立的
只有当中断溢出的时候才会中断CPU当前操作。 不知道我想的对不对
回复

点赞 举报

高级工程师

发表于 2017-7-17 15:55:04  
是的,因为beep里延时的存在对你中断函数是绝对有影响的。不能仅仅根据实际效果好像没啥大问题就放任不管,养成习惯了以后迟早要吃亏。
【玩】蜂鸣器连叫
http://bbs.elecfans.com/jishu_514253_1_1.html
(出处: 中国电子技术论坛)
这是我以前发的一个蜂鸣器的帖子,也是利用定时器实现蜂鸣器的叫的,你可以参考一下。
回复

点赞 举报

实习生

发表于 2017-7-17 20:17:20    楼主|
但我认为
假设中断函数你的溢出是500ms 只要你的延时函数小于500ms就对这个中断应该没有任何影响
只是会增加cpu的负担。
回复

点赞 举报

助理工程师

发表于 2017-7-17 21:08:57  
moon548834 发表于 2017-7-17 20:17
但我认为
假设中断函数你的溢出是500ms 只要你的延时函数小于500ms就对这个中断应该没有任何影响
只是会增加cpu的负担。

你理解的基本正确,假设的例子不可能,什么定时器中断能长达500ms,12M时钟最长只能65ms,中断程序耗时过长也不符合使用中断的原则。在实际应用中常会使用中断嵌套,很有可能发生冲突。
回复

点赞 举报

高级工程师

发表于 2017-7-18 09:12:49  
moon548834 发表于 2017-7-17 20:17
但我认为
假设中断函数你的溢出是500ms 只要你的延时函数小于500ms就对这个中断应该没有任何影响
只是会增加cpu的负担。

如果你有2个中断在进行任务操作,中断本身的目的就是为了快速响应。如果高优先级的中断先中断了,结果进去以后来个delay延时,恰巧低优先级的任务需要执行,那这效率就大打折扣了。
回复

点赞 举报

高级工程师

发表于 2017-7-18 09:21:13  
moon548834 发表于 2017-7-17 20:17
但我认为
假设中断函数你的溢出是500ms 只要你的延时函数小于500ms就对这个中断应该没有任何影响
只是会增加cpu的负担。

还有啊,中断里加延时也会导致你的超级大循环的效率降低,比方说你在主函数里用延时做个闪灯,由于中断延时的问题,主函数的闪灯时间也将变得不可确定。  当然如果你觉得这些都是假设,那就按照自己的理解来。
回复

点赞 举报

高级工程师

发表于 2017-7-18 09:38:32  
中断是用来处理特殊情况,非特定规律情况的,在中断里除了做一些必要的操作外,都是设置一些状态标志,然后返回主程序,由主程序做相应的处理。
在简单的项目里,中断占用资源的弊端不明显,甚至会另程序简化,编程简单,但是在较大的项目里就会出现问题,如当外部中断源多于中断端口时,一个中断端口需要判断多个中断源。如在中断中做必要操作后,在主程序里仍需做大量的提示,记录等系列操作,这些情况都需要中断程序占用资源越少越好。
回复

点赞 举报

实习生

发表于 2017-7-18 09:48:39    楼主|
谢谢大家的回复
昨天和今天早上又看了看并且自己也调试了几番
的确wulin兄弟说延时最多是65ms 我说的那个例子没有考虑到。
harry说的会导致循环效率降低 的确是..而且会让闪烁时间比如本来是1s
但是加了个延时 就肯定不是1s了
人中狼说加状态标志 昨天我也看到了有些人这么说 当时不太明白
现在大概理解了一些 总之就是不要在中断里出现过多操作..
回复

点赞 举报

实习生

发表于 2017-7-18 09:52:24    楼主|
刚刚我在自己仿真时发现
即便是你的中断是只有3 4个基本语句
但实际上仍然做不到精准延时
因为假设你的定时器是1ms
你每1000ms让灯亮一下
那么3 4个基本语句的
有8个左右的机械周期 这部分会*1000的放大 这个误差也是不小的
在我的例子中 实际上这个灯是1010ms亮一下
还需要进行一些补偿 才可以做到精准定时。
这个补偿也是我自己脑补出来的 没想到上网一搜还真有这么个东西..
回复

点赞 举报

高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

我的提问

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

DFRobot专区

树莓派论坛

智能硬件论坛

开发快智能硬件开发平台

Intel物联网开发者专区

Waveshare

乐美客SBC专区

Arduino论坛

BeagleBone论坛

机器人论坛

创客神器NanoPi

小钢炮CANNON

比派科技banana pi专区

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

个人版区

阿东Verilog技术专版

直流马达驱动电路设计

LabVIEW英雄联盟

特权同学FPGA专区

-

厂商专区

灵动微电子 MM32

盈鹏飞嵌入式

TI论坛

TI Deyisupport社区

芯灵思嵌入式论坛

Tisan

米尔科技

庆科社区

WIZnet技术专区

Cypress技术论坛

飞凌嵌入式

Qualcomm技术论坛

英创嵌入式

机智云GoKit论坛

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区