我正在與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,則發生硬件中斷似乎無法準確緩衝硬件中斷。 –