資源管理的核心是解決多任務(wù)對共享資源的爭搶問題,保證資源訪問的互斥性、有序性,同時優(yōu)化資源分配效率,降低內(nèi)存、總線等資源的浪費(fèi)。方案針對內(nèi)存、外設(shè)總線、通信接口三類核心資源,設(shè)計(jì)差異化管理機(jī)制。
內(nèi)存資源管理
掃地機(jī)器人內(nèi)存資源分為內(nèi)部RAM與外部FLASH,采用靜態(tài)分配為主、動態(tài)分配為輔的管理模式,減少內(nèi)存碎片與泄漏風(fēng)險。對于任務(wù)堆棧、全局變量、固定參數(shù)等固定內(nèi)存,采用靜態(tài)分配方式,在系統(tǒng)初始化時完成分配,運(yùn)行過程中不釋放;對于臨時數(shù)據(jù)、緩存數(shù)據(jù)等可變內(nèi)存,采用
RTOS提供的動態(tài)內(nèi)存管理函數(shù)分配,使用完畢后立即釋放,避免內(nèi)存占用累積。
同時,建立內(nèi)存監(jiān)控模塊,實(shí)時監(jiān)測內(nèi)存使用率與剩余空間,當(dāng)內(nèi)存占用超過閾值時,自動清理緩存數(shù)據(jù),防止內(nèi)存溢出。對于FLASH存儲,采用分區(qū)管理模式,劃分為程序區(qū)、參數(shù)區(qū)、地圖存儲區(qū)、日志區(qū),各區(qū)域獨(dú)立尋址,避免數(shù)據(jù)覆蓋與讀寫沖突。
外設(shè)與總線資源管理
串口、SPI、I2C等總線資源為多任務(wù)共享,同一時間僅允許一個任務(wù)訪問,采用互斥信號量實(shí)現(xiàn)總線訪問管控:任務(wù)訪問總線前,先獲取對應(yīng)互斥信號量,訪問完成后釋放信號量;若信號量被占用,任務(wù)進(jìn)入阻塞狀態(tài),等待信號量釋放后再執(zhí)行,避免總線沖突導(dǎo)致的數(shù)據(jù)傳輸錯誤。
對于PWM、ADC等獨(dú)占式外設(shè),采用資源標(biāo)記法管理,任務(wù)使用外設(shè)時標(biāo)記為占用狀態(tài),使用完成后清除標(biāo)記,其他任務(wù)通過查詢標(biāo)記狀態(tài)判斷外設(shè)可用性。同時,優(yōu)化外設(shè)訪問時序,將同類外設(shè)的訪問操作集中執(zhí)行,減少總線頻繁切換帶來的開銷。
任務(wù)間通信與數(shù)據(jù)資源管理
多任務(wù)間需要傳遞傳感器數(shù)據(jù)、控制指令、地圖信息等數(shù)據(jù),借助
RTOS的消息隊(duì)列、信號量、事件標(biāo)志組實(shí)現(xiàn)高效通信:傳感器采集任務(wù)通過消息隊(duì)列將數(shù)據(jù)發(fā)送至運(yùn)動控制與SLAM任務(wù),實(shí)現(xiàn)數(shù)據(jù)解耦;電源管理任務(wù)通過事件標(biāo)志組通知其他任務(wù)切換低功耗模式;采用全局?jǐn)?shù)據(jù)緩沖區(qū)存儲共享數(shù)據(jù),配合互斥信號量保證數(shù)據(jù)讀寫的一致性,防止數(shù)據(jù)篡改與丟失。