參考:8.1.1 概念【野火】物聯網作業系統 liteos 開發實戰指南
huawei liteos | 中文網
不採用c標準庫中的記憶體管理函式malloc()
和free()
原因:
8.1.2 特點
動態記憶體:在動態記憶體池中分配使用者指定大小的記憶體塊
liteos給提供了多種記憶體動態匹配演算法預設使用bestfit
(最佳適應演算法),其他演算法還包括dlink
演算法
8.3.1 動態記憶體運作機制(bestfit演算法)
動態記憶體管理,即在記憶體資源充足的情況下,從系統配置一塊比較大的連續記憶體(記憶體池,其大小為os_sys_mem_size
),根據使用者的需求,分配任意大小的記憶體塊,當使用者不需要該記憶體塊時,又可以釋放回系統供下一次使用。
liteos 動態記憶體管理在最佳適配演算法的基礎上加入了 slab 機制,用於分配固定大小的記憶體塊,進而減小產生記憶體碎片的可能性。
申請記憶體,呼叫los_memalloc
釋放記憶體,呼叫los_memfree
8.3.2 靜態記憶體運作機制
8.4.1 靜態記憶體使用
注意:使用時需要包含「los_membox.h
」
靜態記憶體控制塊
typedef
struct
los_membox_info;
靜態記憶體初始化函式los_memboxinit()
uint32 los_memboxinit
(void *pboxmem,
/* 記憶體池位址,需要使用者自定義 */
uint32 uwboxsize,
/* 記憶體池大小 */
uint32 uwblksize)
;/* 記憶體塊大小 */
初始化後記憶體示意圖:
靜態記憶體申請函式los_memboxalloc()
void *
los_memboxalloc
(void *pboxmem)
/* 指向記憶體池的指標 */
申請記憶體示意圖如下:
靜態記憶體釋放函式los_ memboxfree()
uint32 los_memboxfree
(void *pboxmem,
/* 記憶體池位址 */
void *pbox)
/* 需要釋放的記憶體塊 */
記憶體釋放示意圖:
靜態記憶體內容清除函式los_memboxclr()
void los_memboxclr
(void *pboxmem,
/* 記憶體池位址 */
void *pbox)
/* 需要釋放的記憶體塊 */
注意事項8.4.2 動態記憶體使用
**注意:**使用時需要包含「los_memory.h
」
功能函式huawei liteos 系統中的動態記憶體管理模組為使用者提供下面幾種功能,具體的api詳見介面手冊。
功能分類
介面名描述
記憶體初始化
los_meminit
初始化一塊指定的動態記憶體池,大小為size。
申請動態記憶體
los_memalloc
從指定動態記憶體池中申請size長度的記憶體。
釋放動態記憶體
los_memfree
釋放已申請的記憶體。
重新申請記憶體
los_memrealloc
按size大小重新分配記憶體塊,並保留原記憶體塊內容。
記憶體對齊分配
los_memallocalign
從指定動態記憶體池中申請長度為size且位址按boundary位元組對齊的記憶體。
分析記憶體池狀態
los_memstatisticsget
獲取指定記憶體池的統計資訊
檢視記憶體池中最大可用空閒塊
los_memgetmaxfreeblksize
獲取指定記憶體池的最大可用空閒塊
開發流程
初始化:
申請任意大小的動態記憶體:
釋放動態記憶體:
動態記憶體初始化函式los_meminit()
uint32 los_meminit
(void *ppool,
/* 記憶體開始位址 */
uint32 uwsize)
/* 記憶體塊大小 */
LiteOS之記憶體管理
liteos的記憶體支援靜態分配 動態分配兩種,亦即box和dlink演算法,類似位元組塊和位元組池的差異,靜態分配方式中儲存空間大小一致,而動態分配可以使用變化大小的儲存空間。一 box分配方式 box演算法中記憶體塊的大小是由初始化的時刻固定的。提供magic賦值方式用於記憶體檢查,即在每塊申請...
移植華為LiteOS
1.安裝stm32cubemx 構建裸機工程,生成mdk arm v5 的工程 2.拷貝 liteos 核心原始碼及測試相關 拷貝arch,demos,kernel目錄拷貝到middlewares liteos中 在keil工程中新增.c 原始檔,以及設定標頭檔案路徑 3.拷貝os config 目...
liteos實時作業系統之時間管理
基本概念 時間管理以系統時鐘為基礎。時間管理提供給應用程式所有和時間有關的服務。系統時鐘是由定時 計數器產生的輸出脈衝觸發中斷而產生的,一般定義為整數或長整數。輸出脈衝的週期叫做乙個 時鐘滴答 系統時鐘也稱為時標或者tick。乙個tick的時長可以靜態配置。使用者是以秒 毫秒為單位計時,而晶元cpu...