LiteOS 記憶體管理

2021-09-24 09:10:53 字數 3206 閱讀 1103

參考:

【野火】物聯網作業系統 liteos 開發實戰指南

huawei liteos | 中文網

8.1.1 概念

不採用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...