Embedded 可以禁用\u irq延迟传入的中断,或者永远跳过它

Embedded 可以禁用\u irq延迟传入的中断,或者永远跳过它,embedded,microcontroller,Embedded,Microcontroller,我正在使用STM32系统,我需要通过UART接收字节,问题是我必须同步进程,这意味着当它在做其他事情时,我们不能运行ISR,反之亦然。显然,最简单的方法是在“关键部分”期间禁用irq。但我担心这样做的后果,如果我运行在关键部分,中断即将出现,但被禁用,那么在我再次启用irq时,中断会出现吗,或者我应该丢失中断带来的数据吗?一个设计合理的系统应该让中断保持粘性(在这种情况下,一旦它们点击中断控制器,它们就会被注册,直到得到服务为止) 换句话说,如果在禁用中断时发生中断,则应在重新启用中断后立即触发

我正在使用STM32系统,我需要通过UART接收字节,问题是我必须同步进程,这意味着当它在做其他事情时,我们不能运行ISR,反之亦然。显然,最简单的方法是在“关键部分”期间禁用irq。但我担心这样做的后果,如果我运行在关键部分,中断即将出现,但被禁用,那么在我再次启用irq时,中断会出现吗,或者我应该丢失中断带来的数据吗?

一个设计合理的系统应该让中断保持粘性(在这种情况下,一旦它们点击中断控制器,它们就会被注册,直到得到服务为止)

换句话说,如果在禁用中断时发生中断,则应在重新启用中断后立即触发处理器


那么唯一的问题是,在数据丢失之前,您可以延迟多长时间为中断提供服务。这是每个外围设备的问题。有时设计人员会放入缓冲区/FIFO,有时您需要快速提供服务,否则可能会丢失数据。

尽可能使用DMA和假脱机字节。这取决于您禁用中断的时间n关键部分。如果硬件完成第二个字节的接收,很可能第一个字节已丢失。(可能存在保留几个字节的硬件缓冲,但显然在某些时候它们将丢失。)因此,在很短的时间内禁用中断,或者,如LPs所说,使用不同的技术将数据从硬件复制到RAM中,例如DMA传输。请参阅我在“答案”下的评论字段:如果使用禁用irq,似乎无法准确缓冲硬件中断。谢谢你的回答,Russ。谢谢你的回答,Russ。事实上,我今天想到了一个主意,假设硬件在禁用irq期间无法存储任何内容,我们必须始终处理硬件ISR,并临时存储即将到来的相关数据我们稍后在安全上下文中处理这些数据,这在某些操作系统中通常被称为延迟处理。这种机制明显增加了复杂性,但避免了丢失中断相关数据的风险。抱歉,我之前的帖子可能不准确,基本上延迟ISR例程主要用于减少数据的处理时间ISR,但不是巧合问题。这里的关键问题是,即使是在调用延迟例程的时候,实际的硬件中断仍然可能发生(假设它随时都可能发生),因此除了禁用IRQ之外,几乎没有办法同步该过程。但是,随IRQ而来的数据可能会在禁用IRQ期间丢失