我正在与STM32系统,我需要通过UART RX接收字节,事情是我必须同步过程,这意味着当它做的其他事情我们不能运行ISR,反之亦然。显然,最简单的方法是在该“关键部分”期间禁用irq。但是我担心后果,如果我在关键部分运行并且中断即将出现但被禁用,那么只要我再次启用irq,该中断是否会出现,或者是否应该丢失该数据通过中断?可能disable_irq延迟传入中断或只是直接跳过它
回答
一个设计正确的系统应该有中断粘性(在它们一旦到达中断控制器,它们就会被注册,直到被服务)。
换言之,如果在禁用中断的情况下发生中断,则应在重新启用中断后立即触发处理器。
那么唯一的问题是,在数据丢失之前,您可以延迟服务中断多长时间。这是每个外设的问题。有时候,设计者会将缓冲区/ FIFO放入其中,而其他时候则需要快速处理它或者可能会丢失数据。
谢谢你的回答,Russ。 –
谢谢你的回答,Russ。事实上,我今天提出了一个想法,假设硬件在disable_irq期间将不能存储任何东西,我们必须始终处理硬件ISR并临时存储相关数据,并在稍后安全地处理这些数据,在一些操作系统中通常称为延期rountine。这种机制明显增加了复杂性,但却避免了丢失中断相关数据的风险。 –
对不起,我以前的帖子可能不准确,基本上延迟的ISR例程主要用于缩短ISR的处理时间,但不是重合问题。这里的关键问题是,即使是在调用延迟例程的时候,实际的硬件中断仍然可能发生(假设它可能随时发生),因此除了禁用IRQ之外几乎没有办法同步该过程。但在disable_irq期间,带有IRQ的数据可能会丢失 –
- 1. 中断jQuery延迟功能
- 2. 延迟功能,直到$变为可用
- 3. 延迟跳转
- 4. 诊断EclipseLink连接延迟?
- 5. 功能是否可以延迟启动而不是延迟?
- 6. 脚本检测到延迟并允许它跳过或继续在PHP中
- 7. 可以错过ENTER_FRAME事件或接收器延迟接收吗?
- 8. 跳过ASP.NET并直接跳入ASP.NET MVC是否好?
- 9. Linux中的中断延迟
- 10. 正在跳过JQuery延迟()函数
- 11. 如何延迟BLE中的断开和重新连接过程?
- 12. 是否有可能延迟setAnimationDidStopSelector?
- 13. 是否有可能上传到youtube与Zend库,但延迟列出它,直到我指定的时间?
- 14. MATLAB的帮助:如何跳过或延迟事件
- 15. ALSA直通延迟
- 16. Socket.IO:XHR-断开连接时轮询延迟
- 17. 延迟锚标记“跳”
- 18. 通过直接中断
- 19. 是否有可能延迟BufferedReader从套接字读取
- 20. 使用带有延迟回形针的S3直接上传
- 21. 可能导致MySQL插入查询延迟的可能性
- 22. Angular 4延迟加载模块canLoad或canActivate后卫直接url/
- 23. 是否可以延迟window.load?
- 24. 是否有可能将注释与延迟/只在django 1.2.1中结合?
- 25. 延迟片片断创建
- 26. 停止延迟加载或跳过在NHibernate中加载属性?代理不能通过WCF序列化
- 27. 添加可延迟事件的延迟
- 28. Iterator或foreach中的延迟
- 29. Nodejs for循环中的延迟/中断
- 30. 延迟工作只是不工作
尽可能使用DMA和假脱机字节。 – LPs
这取决于您在关键部分禁用了多长时间的中断。如果硬件完成第二个字节的接收,则可能是第一个字节消失了。 (可能有硬件缓冲保留了几个字节,但很明显在某些时候它们会丢失。)因此,要在非常短的时间内禁用中断,或者如LP所说,使用不同的技术将数据从硬件到RAM,如DMA传输。 – Ross
请在“答案”字段中查看我的意见:如果使用disable_irq,则发生硬件中断似乎无法准确缓冲硬件中断。 –