微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于单片机定时器的问题

关于单片机定时器的问题

时间:10-02 整理:3721RD 点击:
在使用定时器中断的时候,如果中断响应函数执行的时间比定时的时间片长,这种情况下会导致什么样的情况。1、是硬件会进入中断响应函数就自动关闭了定时器,然后执行完中断响应函数才会打开么。
2、如果是这样的话,是所有的单片机都会做这一步么,因为我看到很多定时器功能都没有手动关闭。

定时器是有中断级别的,但是其他中断的中断级别高于定时器的时候,操作系统会默认先执行中断级别高的程序,然后逐级执行。
对于第二问题是所有的程序都是设定好的,比方说你申请了一个变量,然后赋值,这变量的值就固定了(在你重新赋值前),所以当你二次,或者是其他程序访问到这个变量的时候,这个值是不变的(假定其他程序不修改这个变量对应地址的存储值),所以你说的手动关闭的原因是因为设定就是这样,不是说本来就是这样,如果程序开始的时候就没有给用户设定允许修改定时的权限,并默认定时关闭(例如烧水壶,只靠传感器,不用计时器的设备),你是没法启动或者关闭定时器的。

首先,定时器中断是有不同的优先级的,高优先级可以打断低优先级的!同优先级的中断不能相互打断!当程序进去定时器中断的时候,在执行中断函数的同时,如果定时时间到,理论上会再次产生定时器中断,但是,此时的中断优先级和当前的所执行的中断函数的中断优先级相等,因此,中断函数不会被打断,而是继续执行!直到退出中断后,定时器中断函数被执行!

在使用定时器中断的时候,如果中断响应函数执行的时间比定时周期长,这是编程时要避免的情况,否则会出错,如果无法避免且必须要这么做,就得在进入中断响应的第一步就要用软件关闭定时器,完成中断任务后再开启定时器。
1、是硬件会进入中断响应函数就自动关闭了定时器,然后执行完中断响应函数才会打开么?不是的,开关定时器由软件控制。
2、如果是这样的话,是所有的单片机都会做这一步么,因为我看到很多定时器功能都没有手动关闭?所有的单片机都可以软件关闭定时器

您好,对于您第一个回答我有一个疑问。当只有一个定时器中断,但是,我的中断服务函数执行时间长于定时器中断时间,并且在中断服务函数执行过程中,不对定时器进行中断或者打开的操作。那么,在中断函数执行过程中,下一个定时器定时时间已经到来,在这种情况下,理论上是不会打断的(同一个中断,即优先级一样),但是中断函数执行完了以后,又直接进入了中断服务函数。此时,MAIN函数的代码不是永远的都无法执行了么。

那这种情况下,就一直死循环在中断服务函数里了是么。

回答很清楚,谢谢您了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top