鸿蒙Hi3861学习十一-Huawei LiteOS-M(内存池)
一、简介
LiteOS将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的。
LiteOS内存管理模块管理系统的内存资源,包括:初始化、分配、释放。
不采用C标准库中的内存管理函数malloc和free的原因如下:
- 小型嵌入式设备的RAM不足,导致这些函数在有些情况下无法使用
- 内存管理的函数实现代码量可能非常大,占据了相当大的一块代码空间。
- 不安全,执行时间不确定。
- 容易产生碎片。这两个函数会使得连接器配置变得非常复杂。
内存池是线程安全的固定大小的内存块。它的操作速度比动态分配的堆要快得多,而且不会受到碎片的影响。由于是线程安全的,所以,可以从中断中访问。
内存池可以看做是一个固定大小,且大小相同的内存块的链表。从池中分配内存,只是从列表中解除块链,并将控制权交给用户。释放内存到池,只是将块重新链到空闲链表中。

共享内存是线程间交换信息的基本模型之一。与使用消息队列相比,使用内存池交换数据可以在线程之间共享更复杂的对象。
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 !!!!࿰…...
Python3 operator 模块
Python3 中的 operator 模块提供了一系列用于操作 Python 内置类型的函数,这些函数可以替代常规的操作符,同时也提供了一些额外的功能。下面是 operator 模块中的一些常用函数及其作用: 1. operator.add(a, b):返回 a 和 b 的和&…...
106.(cesium篇)cesium椎体旋转
听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <...
springboot+vue漫画之家系统(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的漫画之家系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…...
什么是中国版软件能力成熟度之CSMM
当前,中国软件产业蓬勃发展,产业增速迅猛,发展韧性和潜力进一步凸显。由于我国长期缺乏相关的自主标准,20多年来国外标准在我国软件评估领域占据主导地位,不仅阻碍了我国自主产业发展,甚至通过评估等手段可…...
Jupyter Notebook环境如何搭建以及应用呢?
Jupyter Notebook 是一个开源的 Web 应用程序,可以创建和共享文学化程序文档,支持多种编程语言,如 Python、R、Julia等。下面是搭建 Jupyter Notebook 环境及应用的步骤: 安装 Python 首先需要在本地安装 Python。可以从 Python…...
vmware15+ubuntu+AS
一、VMware Workstation 与 Device/Credential Guard 不兼容 安装VMware15后,在运行启动ubuntu时一直提示与Device/Credential Guard不兼容 1、WINR打开运行,输入services.msc; 2、服务中找 HV主机服务,双击打开设置改为禁用&am…...
【软考备战·希赛网每日一练】2023年5月10日
文章目录 一、今日成绩二、错题总结第一题第二题第三题 三、知识查缺 题目及解析来源:2023年05月10日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: proceed v.开始行动,开展;继续做(或从事、进行&…...
涉及红外的数据集
来源 红外和可见光的联合任务相关数据集 - 知乎 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 通信要素一:IP地址和域名2.2.1 IP地址2.2.2 域名 2.3 通信要素二:端口号2.4 通信要素三:网络通信协议 3. 传输层协议:TCP与UD…...
专业恢复电脑数据软件Easyrecovery16
Easyrecovery是一款强大的数据恢复软件,它专门解决磁盘数据恢复问题。在计算机世界里,数据丢失经常是一件令人头疼的事情,但是有了Easyrecovery,您可以放心大胆地享受数据备份和恢复的乐趣。 Easyrecovery具有快速和有效的数据恢复…...
Java报表中AIX字体丢失的解决方案
在使用Java报表开发时,有时候会遇到AIX字体丢失的问题。这种问题通常发生在AIX操作系统上,因为Java报表应用程序通常运行在Windows操作系统上。但是,在某些情况下,AIX操作系统上的Java应用程序也可能会遇到AIX字体丢失的问题。 AI…...
postgresql数据库linux centos7 安装
简介 (百度百科) PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只…...
ARM PMU外部接口与性能监控寄存器详解
1. ARM性能监控寄存器外部接口深度解析性能监控单元(PMU)是现代处理器架构中用于硬件性能分析的核心模块,它通过一组可编程计数器实时捕获处理器微架构层面的各类事件。在ARMv8/v9架构中,PMU不仅可以通过系统寄存器访问,还提供了标准化的外部…...
[智能体-69]:重新认知MCP:协议不生产智能,只是AI全域交互的标准化基石
MCP只是提供了大模型、编排调度、外部工具能够进行结构化交流的标准,而整个系统的智能主要依赖编排调度,与外部软件系统的交互取决于外部工具,包括外部语音交互、视觉交互、数字化交互。当下MCP(Model Context Protocol࿰…...
从分立逻辑到单片机:基于ATmega8的MIDI通道分析仪设计与实现
1. 项目概述:从分立逻辑到单片机的MIDI通道分析仪进化史二十年前,当我在《Elektor》杂志上发表第一版MIDI通道分析仪时,整个数字音乐世界还处于一个相当“硬核”的阶段。那个版本的设计,用今天的话来说,简直就是一场“…...
第3篇:系统透视——信息部门如何构建“税务友好型”IT架构
本篇导读:如果你是信息总监或IT负责人,请通读全文,尤其是“系统合规设计的三必须”和“现场检查SOP”;如果你是财税人员,请重点阅读“研产供销全链条的系统对接要求”和“与IT部门的协作要点”;如果你是老板…...
OpenIPC开源固件:5分钟解锁网络摄像头的终极控制权
OpenIPC开源固件:5分钟解锁网络摄像头的终极控制权 【免费下载链接】firmware Alternative IP Camera firmware from an open community 项目地址: https://gitcode.com/gh_mirrors/fir/firmware 还在为网络摄像头的封闭系统而烦恼吗?想要完全掌控…...
从科研图表到商业报表:如何用Matplotlib的legend()提升你的图表专业度?
从科研图表到商业报表:如何用Matplotlib的legend()提升你的图表专业度? 在数据驱动的决策时代,图表不仅是科研论文中的证据载体,更是商业汇报中的说服工具。我曾见证一位生物统计学家将同一组临床试验数据呈现给三种不同受众&…...
微信红包助手终极指南:无需ROOT的智能抢红包解决方案
微信红包助手终极指南:无需ROOT的智能抢红包解决方案 【免费下载链接】WeChatLuckyMoney :money_with_wings: WeChats lucky money helper (微信抢红包插件) by Zhongyi Tong. An Android app that helps you snatch red packets in WeChat groups. 项目地址: ht…...
Sora 2 GIF导出速度提升300%?20年多媒体架构师亲授GPU加速转码链路(CUDA 12.4 + cuVID硬编实测)
更多请点击: https://kaifayun.com 第一章:Sora 2 GIF导出方法概览 Sora 2 并非 OpenAI 官方发布的模型,当前(截至2024年)并无名为“Sora 2”的公开产品。因此,所谓“Sora 2 GIF导出”实为社区对视频生成工…...
别再只会用--nogpgcheck了!手把手教你安全修复PostgreSQL yum源的GPG密钥问题
企业级PostgreSQL部署:安全解决GPG密钥验证的完整方案 当你在生产环境中部署PostgreSQL时,遇到GPG签名验证错误直接使用--nogpgcheck绕过检查,就像因为门锁打不开就直接把门拆掉一样危险。本文将带你深入理解GPG验证机制,并提供一…...
智能体任务分配算法:从启发式到深度强化学习的演进与实践
1. 项目概述:从“谁来做”到“如何做得更好”的智能进化在机器人集群、无人机编队或是自动化仓储系统中,我们常常面临一个看似简单实则复杂的问题:眼前有一堆任务,手头有一群可用的智能体(机器人、无人机、服务器等&am…...
