进临界区(关全局中断)是否会影响数据的接收?
生活随笔
收集整理的這篇文章主要介紹了
进临界区(关全局中断)是否会影响数据的接收?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在嵌入式的編程中,經常會使用嵌入式實時操作系統,比如FreeRTOS,RTT等。
而在使用這些操作系統時,會有一個臨界區的概念,一般操作是
1,進入臨界區;
2,操作不能被線程打斷的語句;
3,退出臨界區;
而進入臨界區的具體操作往往就是關掉系統的所有可以關閉的中斷。這里有一個問題,如果有一個外設剛剛要產生一個中斷請求時,這時候恰好進入了臨界區,disable所有中斷,那么這個外設的中斷會不會被丟棄,是不是會有數據丟失了呢?
比如串口的FIFO中斷,我們設置成RXFIFO收到5個字時產生接收中斷,那么上述情況發生時是不是這5個字就丟掉呢?
這個問題我想了一會兒,開始不太明白,后來想到了一個關鍵點,我覺得這數據不會丟失。因為中斷產后往往需要被清除,如果不清除中斷產生標志位的話,系統會一直有這個中斷到來。當上述RXFIFO中斷將要產生時,系統剛剛關了全局中斷,那好這個串口中斷沒有產生請求,但是也沒被清除中斷標志位;于是,等臨界區退出后,它會繼續產生這個中斷請求,之后進入相應中斷處理函數接收FIFO中的數據,并清除中斷,這樣一來數據就成功的被接收到了;
這個過程也提示了兩個注意點,一是進臨界區的時候要盡量短,否則系統可能會漏掉新來的數據;
再是這個FIFO設置的不能太滿,好讓系統在退出臨界區之前還可以接收一定數量的外設進來的數據.
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的进临界区(关全局中断)是否会影响数据的接收?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中断锁与信号量的一种使用场景
- 下一篇: 实现线程栈初始化(RTT)