mcu短时间内发生多次中断,如何解决中断丢失问题?

问题

嵌入式开发中,如果中断A的处理函数执行时间长,某段时间内,快速来了2个中断A(例如:外部管脚输入信号变化),则会导致第2个中断丢失。

我有几个疑问:

1.目前市面上的芯片,是否支持缓存中断标志?例如:中断A在短时间内触发了3次,但是CPU来不及响应(中断A的执行函数时间长,或者正在执行更高优先级的中断),CPU能否记住这3次中断?如果有,目前最多支持缓存几次中断标志?

2.如果没有中断标志位缓存机制,必须保证下一次中断到来之前,处理完本次中断?

3.能否在中断A响应的最初阶段,清除中断A的标志(芯片自动清除or中断处理函数中清除)。此时如果再来一次中断A,芯片会置位中断A的标志位,则理论上可以缓存2次中断标志?

网友的回复总结:

使用异步处理的方式

------中断来了之后,只做中断的记录,不做中断服务的处理。

就好比我们写单片机程序,在中断服务程序里面有一个变量不断增加,然后另外有一个主程序在不断的while 判断处理。

测量中断服务函数执行时间,是否足够小,比如小于5us,如果中断处理程序占用的耗时太大,就必须要优化。

在Linux里面有中断的上半部和下半部,上半部就是处理比较及时的事情,下半部处理比较耗时的操作。

还有在使用中断的时候,如果是已经在处理中,进入中断的第一件事情就是关闭中断,避免中断处理过程中又被中断打断代码执行。

------中断有没有必要增加一个缓存?

缓存是一个好东西,但是缓存了就一定会导致中断的不足够及时,比如中断的思想是,我要上厕所,我现在就必须现在上厕所。前面说的我,就是「中断」,那如何设计一个中断缓存,成了一个有意思的话题,中断服务程序需要做的事情就是不断的往这个缓存里面扔东西,另外需要一个线程不断的从缓存里面拿东西来处理,直到缓存为空。

------当然,缓存也有缓存的问题,所以看到有人在回复

--- 目前没有芯片实现缓存,中断只有已触发标志和已清除标志,并没有触发了几次的信息

缓存是软件的思想,CPU部分可不想考虑这么低级的事情。

---------如果没有中断标志位缓存机制,必须保证下一次中断到来之前,处理完本次中断?

上面提到一个做法是,在进入中断的时候关闭中断,那还有就是,在进入中断的时候,先清除当前的中断标识位,然后去做处理,如果在处理过程中又有中断产生了,中断标志位就会置位,那在退出中断后又会重新进入中断。

通过上面的方法,就可以起到缓存 1 个中断的目的,相当于有一个buff,可以处理2次中断。

相关推荐
ElendaLee14 小时前
第八章 矩阵按键实验
嵌入式硬件·51单片机
三佛科技-1341638421214 小时前
卷发棒/卷发梳MCU方案分析
单片机·嵌入式硬件
白掰虾15 小时前
STM32N6&AI资料汇总
人工智能·stm32·嵌入式硬件·stm32n6·stm32ai
Aczone2815 小时前
硬件(十)IMX6ULL 中断与时钟配置
arm开发·单片机·嵌入式硬件·fpga开发
机器视觉知识推荐、就业指导16 小时前
单片机关于中断的理解
单片机·嵌入式硬件
星空的资源小屋16 小时前
Digital Clock 4,一款免费的个性化桌面数字时钟
stm32·单片机·嵌入式硬件·电脑·excel
xiugou79819 小时前
记录一下CubeMX+Clion的STM32 CMake工程中如何修改Flash程序存储的起始地址
stm32·单片机·嵌入式硬件
XINVRY-FPGA19 小时前
XCKU15P-2FFVA1760I AMD 赛灵思 Xilinx Kintex UltraScale+ FPGA
arm开发·嵌入式硬件·阿里云·fpga开发·云计算·硬件工程·fpga
清风6666661 天前
基于STM32单片机的OneNet物联网粉尘烟雾检测系统
stm32·单片机·物联网·毕业设计·课程设计
文火冰糖的硅基工坊1 天前
[硬件电路-192]:基级与发射极两端的电压超过1.5v可能是什么原因
单片机·嵌入式硬件·系统架构·电路·跨学科融合