天天看點

無RTOS下使用隊列出現的問題記錄

這兩天遇到一個問題,在無RTOS情況下,使用隊列緩存序列槽接收到的資料,發現跑一段時間後,會出現隊列中*Out和*In在NData為0時不一樣。正常情況,當資料全部讀取完畢後,這兩個位址應該是一緻的。後面經過思考,認為應該是我在序列槽中斷中,将序列槽接收到的資料寫入隊列。有可能是正常程式正在執行隊列操作,這時候中斷打斷了,寫入或者讀出一個位元組,中斷完畢後,主體程式從堆棧中提取中斷前的狀态,進而忽略了中斷中的操作。而在有RTOS中時,我們都會進行關中斷操作。注意,這個目前還隻是猜想。沒有切實驗證過。

繼續閱讀