ucos內存管理方法十分小巧,實時性好,非常值得借鑒。大致原理如下:
ucos把內存初始化成相同大小的內存塊,使用單向鏈表的方式連接起來,使用時從鏈表摘下,釋放時重新插入鏈表。
當然可以存在多條鏈表,根據用戶需求配置,同一個鏈表內內存塊是相同大小的。比如,以100或200字節為內存塊的內存鏈表。
每條內存鏈表使用一個結構體(OS_MEM)控制,這個結構體描述了這一條鏈表中的內存屬性,比如內存塊大小,剩余內存塊的數量,內存塊總數量等等。
1、
此函數由系統內部調用,用戶不必理會,主要是一些初始化動作,前面說了每條鏈表都有一個結構體OS_MEM控制。
ucos建立了一個OS_MEM結構體數組,這個函數就是把這個結構體數組成員使用單向鏈表連接起來,并且對結構體進行初始化。
ucos使用一個全局指針指向表頭,方便結構體取用。每一個結構體都可以控制一個內存鏈表。結構體數量用戶可以通過宏定義配置。
2、
此函數初始化并創建內存塊鏈表。主要過程是從結構體鏈表中取下一個空閑結構體。根據參數提供的內存起始地址和內存塊大小,把整個內存分為大小一致的內存塊,使用單向鏈表連接起來。
再把內存塊鏈表的屬性信息填寫到結構體中。此函數返回一個結構體指針。找到這個結構體就找到了這條鏈表。
3、
根據OS_MEM類型指針找到對應的鏈表結構體,如果空閑的內存塊數量大于0,那么從鏈表中摘下一個內存塊,然后修改OS_MEM結構體信息,返回內存首地址。
4、
這個簡單,獲得內存塊鏈表的名稱。
5、
這個簡單,設置內存塊鏈表的名稱。
6、
釋放內存,把用完的內存塊,插入pmem對應的鏈表中,然后修改pmem結構體信息。
7、
查詢指定的內存鏈表中的內存使用情況,查詢結果放在OS_MEM_DATA 結構體中。
優點:
仔細閱讀源碼就會發現,每次取出內存塊的時間是一樣的,速度非常快,放入內存塊消耗的時間也是一樣,運行時間可控,實時性非常好,代碼量很小。
缺點:
每條鏈表中的內存塊都是一樣大小,使用時會有些浪費。
-
控制器
+關注
關注
112文章
16397瀏覽量
178514 -
內存管理
+關注
關注
0文章
168瀏覽量
14159 -
ucos-ii
+關注
關注
1文章
11瀏覽量
3593
發布評論請先 登錄
相關推薦
評論