這個是全網(wǎng)最詳細(xì)的STM32項目教學(xué)視頻。
第一篇CSDN文章在這里在這里:
75
V3:HAL庫開發(fā)、手把手教學(xué)下面功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、openmv視覺控制、電磁循跡、FreeRTOS、K210視覺智能車(更新中)、K230視覺智能車(更新中)、MSPM0G3507視覺智能車(更新中)
第23章-FreeRTOS項目實(shí)戰(zhàn)–任務(wù)與任務(wù)、任務(wù)與中斷之間的通信和同步
前面我們講解了如何創(chuàng)建任務(wù),多任務(wù)如何輪流執(zhí)行,多任務(wù)和中斷之間經(jīng)常進(jìn)行同步或者通信,我們還是像裸機(jī) 一樣通過全局變量標(biāo)志位和全局變量數(shù)組進(jìn)行同步和通信是否存在一些隱患那?
23.1-消息隊列
23.1.0-消息隊列和全局變量對比
回答 為什么要在操作系統(tǒng)中使用消息隊列而不是 全局變量
消息隊列 vs 全局變量
- 全局?jǐn)?shù)組需要解決多任務(wù)訪問沖突,需要加臨界區(qū)保護(hù)全局?jǐn)?shù)組或者數(shù)據(jù)被多任務(wù)訪問 可能會出現(xiàn)沖突的原因是: 訪問全局變量的操作往往需要多部匯編指令: 讀取數(shù)據(jù),修改數(shù)據(jù),寫回數(shù)據(jù)。而任務(wù)調(diào)度器可以在任意時刻打斷訪問指令,切換另一個任務(wù),這樣的話,如果在讀取數(shù)據(jù)和寫回數(shù)據(jù)之間發(fā)生切換,數(shù)據(jù)可能就處于未更新的狀態(tài)。比如導(dǎo)致任務(wù)使用上次變量狀態(tài),所以沒有獲得最新數(shù)據(jù)。所以為了防止出現(xiàn)再讀取數(shù)據(jù)和寫回數(shù)據(jù)之間發(fā)生切換,操作系統(tǒng)的消息隊列在數(shù)據(jù)操作時候增加了關(guān)閉任務(wù)切換相關(guān)保護(hù)。
PPT 215到231講解 數(shù)據(jù)全局變量的數(shù)據(jù)競爭,和消息隊列是如何解決這個問題的。
- 消息隊列可以實(shí)現(xiàn)超時機(jī)制消息隊列的接收或者發(fā)送均可以設(shè)置超時時間,這樣可以提高系統(tǒng)的響應(yīng)性和保證系統(tǒng)靈活性和容錯能力。
- 消息隊列可以實(shí)現(xiàn)FIFO和LIFO機(jī)制可以設(shè)置先進(jìn)先出或者后進(jìn)先出的的數(shù)據(jù)機(jī)制,更加靈活便于數(shù)據(jù)處理。
閱讀全文