当前位置: 首页 > news >正文

鸿蒙Hi3861学习十一-Huawei LiteOS-M(内存池)

一、简介

        LiteOS将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的。

        LiteOS内存管理模块管理系统的内存资源,包括:初始化分配释放

        不采用C标准库中的内存管理函数malloc和free的原因如下:

  1. 小型嵌入式设备的RAM不足,导致这些函数在有些情况下无法使用
  2. 内存管理的函数实现代码量可能非常大,占据了相当大的一块代码空间。
  3. 不安全,执行时间不确定。
  4. 容易产生碎片。这两个函数会使得连接器配置变得非常复杂。

        内存池是线程安全的固定大小的内存块。它的操作速度比动态分配的堆要快得多,而且不会受到碎片的影响。由于是线程安全的,所以,可以从中断中访问

        内存池可以看做是一个固定大小,且大小相同内存块的链表从池中分配内存,只是从列表中解除块链,并将控制权交给用户。释放内存到池,只是将块重新链到空闲链表中

         共享内存是线程间交换信息的基本模型之一。与使用消息队列相比,使用内存池交换数据可以在线程之间共享更复杂的对象

Memory Pool

二、特点

        内存管理模块通过对内存的释放、申请操作,来管理用户和OS对内存的使用。使内存的利用率和使用率达到最优,同时最大限度地解决系统的内存碎片问题。

        内存管理分为:静态内存管理和动态内存管理。

        静态内存管理:在静态内存池中分配用户初始化时预设(固定)大小的内存块

  •         优点:分配和释放效率高,静态内存池中无碎片
  •         缺点:只能申请到初始化预设的内存块,不能按需申请。

        动态内存:在动态内存池中分配用户指定大小的内存块

  •         优点:按需分配
  •         缺点:内存池可能会存在碎片

        注:小熊派目前使用的都是动态内存的方式。

三、API介绍

      osMemoryPoolNew

        函数功能:

        创建内存池。不能在中断中调用。

        函数原型:

osMemoryPoolId_t osMemoryPoolNew (uint32_t block_count, uint32_t block_size, const osMemoryPoolAttr_t *attr);

        参数:

        block_count:申请的内存块个数

        block_size:每个内存块的大小

        attr:属性。自定义内存时使用,默认为NULL

        返回值:

        NULL:失败

        其他值:内存池ID

        实例:

osMemoryPoolId_t mpid_MemPool = NULL;
mpid_MemPool = osMemoryPoolNew(MEMPOOL_OBJECTS,sizeof(MEM_BLOCK_t),NULL);

      osMemoryPoolAlloc

        函数功能:

        从内存池中申请内存块。如果内存池空,则挂起,直到有内存块可用。如果超时时间为0,可在中断中调用

        函数原型:

void *osMemoryPoolAlloc (osMemoryPoolId_t mp_id, uint32_t timeout);

        参数:

        mp_id:内存池ID。创建内存池osMemoryPoolNew时获得。

        timeout:等待超时时间

        返回值:

        获取到的内存块地址

        实例:

MEM_BLOCK_t *pMem = NULL;
osMemoryPoolId_t mpid_MemPool = NULL;pMem = osMemoryPoolAlloc(mpid_MemPool,100);

      osMemoryPoolFree

        函数功能:

        释放内存块到内存池中。可在中断中调用

        函数原型:

osStatus_t osMemoryPoolFree (osMemoryPoolId_t mp_id, void *block);

        参数:

        mp_id:内存池ID。创建内存池osMemoryPoolNew时获得

        block:要释放的内存块地址。osMemoryPoolAlloc的返回值

        返回值:

        osOK:成功、

        其他值:失败

        实例:

osMemoryPoolId_t mpid_MemPool = NULL;
MEM_BLOCK_t *pMem = NULL;
osStatus_t rst = osMemoryPoolFree(mpid_MemPool,pMem);

      osMemoryPoolDelete

        函数功能:

        删除内存池。不能在中断中使用

        函数原型:

osStatus_t osMemoryPoolDelete (osMemoryPoolId_t mp_id);

        参数:

        mp_id:内存池ID。创建内存池osMemoryPoolNew时获得。

        返回值:

        osOK:成功、

        其他值:失败

        实例:

osMemoryPoolId_t mpid_MemPool = NULL;
osStatus_t ret = osMemoryPoolDelete(mpid_MemPool);

四、实例

        待补充。

相关文章:

鸿蒙Hi3861学习十一-Huawei LiteOS-M(内存池)

一、简介 LiteOS将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的。 LiteOS内存管理模块管理系统的内存资源,包括:初始化、分配、释放。 不采用C标准库中的内存管理函…...

MySQL原理(七):内存管理和磁盘管理

前言 上一篇介绍了 MySQL 的日志,这一篇将介绍内存管理和磁盘管理相关的内容。 内存管理 MySQL 的数据都是存在磁盘中的,我们要更新一条记录的时候,得先要从磁盘读取该记录,然后在内存中修改这条记录。修改完这条记录后会缓存起…...

【Shell脚本】Linux安装Nginx以及开机自启

目录 一、Linux安装Nginx脚本1、把编写好的安装Nginx脚本放置到nginx.sh文件中2、在检查网络的时候,这里的IP地址,填写的需要安装Nginx服务器的IP地址3、这里的端口号可按照自己的需要进行修改4、安装Nginx脚本 二、Nginx开机自启 一、Linux安装Nginx脚本…...

solidworks三维建模竞赛练习题

solidworks三维建模竞赛练习题:3D01‐ 01 solidworks三维建模竞赛练习题:3D01‐ 02 solidworks三维建模竞赛练习题:3D01‐ 03 solidworks三维建模竞赛练习题:3D01‐ 04 solidworks三维建模竞赛练习题:3D01‐ 05 solidw…...

Redis---订阅和发布

目录 消息系统命令 消息系统 ​ 发布/订阅,即 pub/sub,是一种消息通信模式:发布者也称为消息生产者,生产和发送消息到存储系统;订阅者也称为消息消费者,从存储系统接收和消费消息。这个存储系统可以是文件系…...

使用Statsmodel进行假设检验和线性回归

如果你使用 Python 处理数据,你可能听说过 statsmodel 库。Statsmodels 是一个 Python 模块,它提供各种统计模型和函数来探索、分析和可视化数据。该库广泛用于学术研究、金融和数据科学。在本文中,我们将介绍 statsmodel 库的基础知识、如何…...

mac电脑 安装homebrew、nvm、node、nrm

安装homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)brew -v 查看版本号 根据提示。继续执行 不然之后安装nvm报错(Error: Command failed with exit 128: git);例子: g…...

chrome 113 因为策略原因 cookie显示非常隐蔽

难受的要死,找不到cookie,安装老版本还疯狂偷跑我代理的流量更新!!!!!!! 解决方案: 回退112 !!!!&#xff0…...

Python3 operator 模块

Python3 中的 operator 模块提供了一系列用于操作 Python 内置类型的函数,这些函数可以替代常规的操作符,同时也提供了一些额外的功能。下面是 operator 模块中的一些常用函数及其作用: 1. operator.add(a, b):返回 a 和 b 的和&…...

106.(cesium篇)cesium椎体旋转

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <...

springboot+vue漫画之家系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的漫画之家系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…...

什么是中国版软件能力成熟度之CSMM

当前&#xff0c;中国软件产业蓬勃发展&#xff0c;产业增速迅猛&#xff0c;发展韧性和潜力进一步凸显。由于我国长期缺乏相关的自主标准&#xff0c;20多年来国外标准在我国软件评估领域占据主导地位&#xff0c;不仅阻碍了我国自主产业发展&#xff0c;甚至通过评估等手段可…...

Jupyter Notebook环境如何搭建以及应用呢?

Jupyter Notebook 是一个开源的 Web 应用程序&#xff0c;可以创建和共享文学化程序文档&#xff0c;支持多种编程语言&#xff0c;如 Python、R、Julia等。下面是搭建 Jupyter Notebook 环境及应用的步骤&#xff1a; 安装 Python 首先需要在本地安装 Python。可以从 Python…...

vmware15+ubuntu+AS

一、VMware Workstation 与 Device/Credential Guard 不兼容 安装VMware15后&#xff0c;在运行启动ubuntu时一直提示与Device/Credential Guard不兼容 1、WINR打开运行&#xff0c;输入services.msc&#xff1b; 2、服务中找 HV主机服务&#xff0c;双击打开设置改为禁用&am…...

【软考备战·希赛网每日一练】2023年5月10日

文章目录 一、今日成绩二、错题总结第一题第二题第三题 三、知识查缺 题目及解析来源&#xff1a;2023年05月10日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; proceed v.开始行动&#xff0c;开展&#xff1b;继续做&#xff08;或从事、进行&…...

涉及红外的数据集

来源 红外和可见光的联合任务相关数据集 - 知乎 LLVIP Dataset(RGB-T Pedestrian Detection) Jia X, Zhu C, Li M, et al. LLVIP: A visible-infrared paired dataset for low-light vision[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2…...

网络编程(TCP与UDP协议)

文章目录 1. 网络编程1.1 软件架构1.2 网络基础 2. 网络通信要素2.1 如何实现网络中的主机互相通信2.2 通信要素一&#xff1a;IP地址和域名2.2.1 IP地址2.2.2 域名 2.3 通信要素二&#xff1a;端口号2.4 通信要素三&#xff1a;网络通信协议 3. 传输层协议&#xff1a;TCP与UD…...

专业恢复电脑数据软件Easyrecovery16

Easyrecovery是一款强大的数据恢复软件&#xff0c;它专门解决磁盘数据恢复问题。在计算机世界里&#xff0c;数据丢失经常是一件令人头疼的事情&#xff0c;但是有了Easyrecovery&#xff0c;您可以放心大胆地享受数据备份和恢复的乐趣。 Easyrecovery具有快速和有效的数据恢复…...

Java报表中AIX字体丢失的解决方案

在使用Java报表开发时&#xff0c;有时候会遇到AIX字体丢失的问题。这种问题通常发生在AIX操作系统上&#xff0c;因为Java报表应用程序通常运行在Windows操作系统上。但是&#xff0c;在某些情况下&#xff0c;AIX操作系统上的Java应用程序也可能会遇到AIX字体丢失的问题。 AI…...

postgresql数据库linux centos7 安装

简介 &#xff08;百度百科&#xff09; PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;是以加州大学计算机系开发的POSTGRES&#xff0c;4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...