進臨界區 關全域性中斷 是否會影響資料的接收

2021-09-27 11:26:28 字數 641 閱讀 1194

在嵌入式的程式設計中,經常會使用嵌入式實時作業系統,比如freertos,rtt等。

而在使用這些作業系統時,會有乙個臨界區的概念,一般操作是

1,進入臨界區;

2,操作不能被執行緒打斷的語句;

3,退出臨界區;

而進入臨界區的具體操作往往就是關掉系統的所有可以關閉的中斷。這裡有乙個問題,如果有乙個外設剛剛要產生乙個中斷請求時,這時候恰好進入了臨界區,disable所有中斷,那麼這個外設的中斷會不會被丟棄,是不是會有資料丟失了呢?

比如串列埠的fifo中斷,我們設定成rxfifo收到5個字時產生接收中斷,那麼上述情況發生時是不是這5個字就丟掉呢?

這個問題我想了一會兒,開始不太明白,後來想到了乙個關鍵點,我覺得這資料不會丟失。因為中斷產後往往需要被清除,如果不清除中斷產生標誌位的話,系統會一直有這個中斷到來。當上述rxfifo中斷將要產生時,系統剛剛關了全域性中斷,那好這個串列埠中斷沒有產生請求,但是也沒被清除中斷標誌位;於是,等臨界區退出後,它會繼續產生這個中斷請求,之後進入相應中斷處理函式接收fifo中的資料,並清除中斷,這樣一來資料就成功的被接收到了;

這個過程也提示了兩個注意點,一是進臨界區的時候要盡量短,否則系統可能會漏掉新來的資料;

再是這個fifo設定的不能太滿,好讓系統在退出臨界區之前還可以接收一定數量的外設進來的資料.

臨界區,臨界資源

什麼是臨界區?答 每個程序中訪問臨界資源 比如全域性變數等公用資源 的那段程式 稱為臨界區 臨界資源是一次僅允許乙個程序使用的共享資源,如全域性變數等 也稱為臨界段。也就說是每個程序 ucos中是任務 都可以有訪問這個全域性變數的 比如某個程序想用該變數做加法,另外乙個程序想用這個變數做其它用途等,...

臨界資源和臨界區

臨界資源 臨界資源是一次僅允許乙個程序使用的共享資源,各程序採取互斥的方式實現共享的資源。屬於臨界資源的硬體有,印表機,磁帶機等 軟體有訊息佇列,變數,陣列,緩衝區等。諸程序間採取互斥方式,實現對這種資源的共享。臨界區 每個程序中訪問臨界資源的那段 稱為臨界區 criticalsection 每次只...

臨界資源和臨界區

個人部落格 the blog of waiterxiaoyy 歡迎來互相交流學習。屬於臨界資源的 硬體 印表機 磁帶機 軟體 訊息佇列 變數 陣列 緩衝區。每個程序訪問臨界資源的那段 稱為臨界區。不論是硬體臨界資源還是軟體臨界資源,多個程序必須互斥地對它進行訪問。保證諸程序互斥地進入臨界區,便可實現...