找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1152|回复: 19
收起左侧

单片机定时器中断会被下一个定时器中断吗?

  [复制链接]
ID:237471 发表于 2024-6-12 21:20 | 显示全部楼层 |阅读模式
1、定时器设为5毫秒
2、第一次定时器中断,程序开始处理一些事务
3、由于事务繁多,或预估的5毫秒时间不够处理完事务,这时下一个定时器中断时间到了
4、请问,本次中断会被下一个中断打断么,还是会忽略到来的中断继续处理没做完的事务,一直到完成本次中断
回复

使用道具 举报

ID:624769 发表于 2024-6-12 22:27 | 显示全部楼层
如果,你的定时器中断周期是5ms, 而你中断中需要处理的事件耗时需要超过5ms,那么,你这个设计是失败的!
你根本出不了中断,或者说,有出去这个动作,随后又进去了,那么,你还要中断程序干什么?直接写在 while(1)里面就好了。
回复

使用道具 举报

ID:1110945 发表于 2024-6-12 23:54 | 显示全部楼层
定时间隔尽量设长一些,中断内的程序尽量少一些,
长时间才能处理完的任务要放在大循环中执行。
“中断函数重入”这种你不能预料的事情要杜绝。
一家之言。
回复

使用道具 举报

ID:1109793 发表于 2024-6-13 07:10 | 显示全部楼层
中断可以被更高级的中断,不能被平级或者自己再次中断。把中断里面的耗时的东西拿到主循环里面
回复

使用道具 举报

ID:517951 发表于 2024-6-13 07:42 | 显示全部楼层
中断执行程序要尽可能的短小精悍, 耗时过长的任务放在main主程序中执行. 5ms的中断程序还没执行完毕, 下一个5ms又来, 中断程序不可以被自己打断的.要等到执行完毕以后才能再次进入5ms的中断程序.中断抢占是要被更高一级的中断程序打断.
回复

使用道具 举报

ID:879348 发表于 2024-6-13 08:38 | 显示全部楼层
不会,但是如果一直这样繁忙,mian函数就无法运行了
回复

使用道具 举报

ID:91150 发表于 2024-6-13 10:55 | 显示全部楼层
5#说的 “中断程序不可以被自己打断的.要等到执行完毕 (这个中断程序) 以后才能再次进入...(这个)中断程序.”   是正确的
回复

使用道具 举报

ID:1124287 发表于 2024-6-13 11:31 | 显示全部楼层
要看中断的优先级,高的会打断低的,低的或同等不会
回复

使用道具 举报

ID:1118092 发表于 2024-6-13 11:48 | 显示全部楼层
如果中断服务程序没有屏蔽定时器中断,并且下一个定时器中断的优先级不低于当前正在处理的中断,那么下一个定时器中断会打断当前的中断服务程序,并跳转到新的中断服务程序。这可能导致当前中断服务程序中的数据或状态被破坏,除非它已经被适当地保护起来。
回复

使用道具 举报

ID:1125103 发表于 2024-6-13 17:52 | 显示全部楼层
必须手动清除这个中断标志位以后,才会产生下一个中断,你把事情处理完了,再清除标志位,这样就不会出现冲突的情况了。
回复

使用道具 举报

ID:1125104 发表于 2024-6-13 18:12 | 显示全部楼层
When the processor is servicing the interrupt program, the first thing it does is to disable interrupts (this is automatic and it is done by the processor).

When you finish the interrupt and execute the "RETI" instruction (return from interrupt), this instruction automatically will return from interrupt and also it will reenable the interrupts (wich were disabled by the processor when it started executing this intrerrupt).
回复

使用道具 举报

ID:57657 发表于 2024-6-14 17:57 | 显示全部楼层
如果下一个定时器中断比当前中断优先级高就能会被打断,否则不能,具体见数据手册。
回复

使用道具 举报

ID:1034262 发表于 2024-6-15 11:26 | 显示全部楼层
正在处理中断时,不会被中断打断,会处理完成退出后,马上又进来。
中断处理时间长于中断间隔时间,结果是,CPU被拖死,设计严重不当!一般要求所有中断耗时最长时占CPU时间的一半以下为好。
回复

使用道具 举报

ID:237471 发表于 2024-6-16 21:55 | 显示全部楼层
经过严格测试,定时器中断不会被自己下一个中断打断,在本次中断未运行完之前,会忽略正在发生的定时器中断
回复

使用道具 举报

ID:313517 发表于 2024-6-21 23:13 | 显示全部楼层
会的,低优先级的中断会被高优先级的中断所打断
回复

使用道具 举报

ID:57657 发表于 2024-6-22 11:26 | 显示全部楼层
定时器设定为5毫秒,定时器中断内的程序要求必须在5毫秒内返回,否则会导致时间紊乱。
回复

使用道具 举报

ID:1116447 发表于 2024-6-22 16:51 | 显示全部楼层
中断会不会被中断,要看你自己的中断优先级,中断等级低的会被中断等级高的中断
回复

使用道具 举报

ID:724465 发表于 2024-7-21 20:29 | 显示全部楼层
不会,因为中断服务子程序处理时间不在定时器计数时间内
回复

使用道具 举报

ID:74687 发表于 2024-7-21 21:17 | 显示全部楼层
中断只改变Flag变量,不干具体的事,具体业务处理放进main里处理。
回复

使用道具 举报

ID:1128908 发表于 2024-7-21 21:22 | 显示全部楼层
中断服务程序的执行时间:一旦定时器中断被触发,CPU会进入相应的中断服务程序。如果当前的中断服务程序执行时间过长,而下一个定时器中断的时间已经到达,那么CPU的行为将取决于中断优先级的设置。  如果当前中断的优先级高于下一个定时器中断的优先级,那么CPU将继续执行当前的中断服务程序,直到其完成。下一个定时器中断将被暂时挂起,等待当前中断处理完毕后再进行处理。 如果下一个定时器中断的优先级高于或等于当前中断的优先级,那么CPU可能会立即响应下一个定时器中断,中断当前的中断服务程序,转而执行新的中断服务程序。这可能会导致当前中断服务程序中的部分工作被打断,需要在新的中断服务程序执行完毕后,再由CPU决定是否继续执行之前被打断的中断服务程序。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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