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

news2025/1/12 5:56:41

一、简介

        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);

四、实例

        待补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/513477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

精准锁定证件材料篡改位置,合合信息智能图像处理技术助力金融机构防范违规开户

得知帮助他人办理几张银行卡、电话卡,就能坐等“分红”,许多人怀着“吃馅饼”的心态掉入了陷阱。今年4月,海南一男子出借银行卡帮助不法分子进行电信网络诈骗,涉案资金流水近10万元,被警方抓捕。此前,西安某…

如何在VUE中使用andflow流程设计组件

andflow_js 是基于js、css、html开发的一个前端流程设计组件,目的是方便前端开发流程设计器。实现各种流程设计的样式风格,以及对设计结果的读取和显示,以便于与将设计结果提供给后端保存和执行。 由于VUE框架在许多实际项目中经常使用&…

安卓稳定性技术栈

涉及技术内容: framework java层 语言:Java 1.开机启动流程:Android 7.0平台开机启动_android7.0开机自启_jamousjang的博客-CSDN博客 Android系统启动流程解析 基于Android13的系统启动流程分析 2.Watchdog机制 3.Anr 机制 4.AMS四大…

Monte carlo 求解积分

Monte carlo 求解积分 文章目录 Monte carlo 求解积分[toc]1 单变量情形2 多变量情形 1 单变量情形 假设待求解积分形式为 θ ∫ 0 1 f ( x ) d x \theta\int_0^1 f(x) \mathrm{d} x θ∫01​f(x)dx 其中 θ \theta θ为积分值。引入随机变量 X ∼ U ( 0 , 1 ) X\sim U(0,1)…

服务攻防-应用协议-远控软件漏洞向日葵VNCTV-平台漏洞KibanaZabbix-附真实案例演示

目录 一、导图 二、远程控制-向日葵&Vnc&Teamviewer 1、向日葵 ▶漏洞利用工具下载地址: ▶实例展示: 2、Vnc ▶Vnc简介: ▶实例展示: 3、Teamviewer ▶Teamviewer简介: ▶实例展示: 三、设备…

小灰的基金,亏了67W。。。

2022年基金市场有多差?相信大家都有目共睹。小灰的基金在去年也赔得很惨,还每次写过几篇文章: 跌吧,继续跌吧,小灰的基金已亏损64万。。。 基金亏损84万,小灰反手把银行客户经理投诉了 今年是疫情结束的第一…

成为Smartbi合伙人,现金奖励可达15000元

2023年Smartbi推出合伙人计划即日起至2023年12月31日只要您成为思迈特软件合伙人推荐有效商机即有机会赢取上万元现金奖励商机奖励1000元,合同签约奖励可达15000元同时我们将为您提供全方位的支持和帮助实现共谋、共创、共赢!*点击https://www.smartbi.c…

长文多图一步步讲清楚:DDD理论、建模与代码实现全流程

欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习 1 六个问题 1.1 为什么使用DDD DDD方法论核心是将问题不断分解&#xff0c…

院内导航移动导诊服务体系,院内导航怎么实现?

院内导航怎么实现?经过多年发展,医院规模愈加庞大,尤其是综合性医院,院区面积较大,门诊、医技、住院等大楼及楼区内部设计复杂,科室、诊室数量众多,对于新患者犹如进入了迷宫,客观环…

《花雕学AI》Poe:一个让你和 AI 成为朋友的平台,带你探索 ChatGPT4 和其他 八种AI 模型的奥秘

你是否曾经梦想过,能够在一个平台上,和多种不同的 AI 模型进行有趣、有用、有深度的对话,甚至还能轻松地把你的对话分享给其他人?如果你有这样的梦想,那么 Poe 一站式 AI 工具箱就是你的不二之选! Poe 是国…

让AI来告诉你什么叫幽灵堵车

使用环境参考 CocosCreator v3.7.2 ChatGPT 正文 什么是幽灵堵车 堵车,大家都不陌生! 堵车时我就思维发散,用 CocosCreator 模拟下堵车应该挺好玩,网上总说高速上最前面如果有个龟速的车,后面能堵车堵个两三公里。…

计算机毕业论文选题推荐|软件工程|系列四

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)的人脸识别系统…

python定时任务2_celery flower计划任务

启动worker: celery -A tasks worker --loglevelerror --poolsolo worker启动成功 启动beat celery -A tasks beat --loglevelinfo beat启动成功 启动flower celery -A tasks flower --loglevelinfo flower启动成功,然后进入http://localhost:5555 可…

手把手教你怎么搭建自己的ChatGPT和Midjourney绘图(含源码)

AI程序采用NUXT3LARAVEL9开发(目前版本V1.1.7) 授权方式:三个顶级域名两次更换 1.AI智能对话-对接官方和官方反代(markdown输出)PS:采用百度与自用库检测文字 2.AI绘图-根据关键词绘图-增加dreamStudio绘画-增加mid…

每日一个小技巧:1分钟告诉你图片怎么转语音

随着科技的不断进步,人们对于信息的获取方式也越来越多样化。而在这些方式中,图片和文字无疑是比较常见的两种。图片以其生动直观的特点吸引了许多人的眼球,而文字则以其更为详尽的信息呈现方式成为了人们了解事物的首选。然而,对…

金融行业数据分类分级“五步走” | 盾见

文|查浩奇 《数据安全法》明确提出,国家要建立数据分类分级保护制度,根据数据在经济社会发展中的重要程度,以及一旦遭到篡改、破坏、泄露或者非法获取、非法利用,对国家安全、公共利益或者个人、组织合法权益造成的危害程度&…

java泛型通配符

通配符有三种: 第一种: 问号(?),表示所有类型 第二种:extends 类名 ,表示该类及继承了该类的类型 第三种:super 类名, 表示该类和该类的父类 第一种:&…

大屏设计都是收费的吗?今天教你用积木报表做大屏,完全免费吆!

一、登录积木报表 1. 打开网址 输入用户名、密码,即可登录,如下图1.11所示: 备注:如果没有账号,需要自己用手机号注册一个账号,即可使用;图1.11 2. 进入系统后,点击“我的大屏” …

SSM框架练习—主从表的业务模型

需要实现的整体功能: 系统的登录并进行用户名的校验团购信息的列表展示团购信息的添加团购信息的检索 1、数据库创建 CREATE DATABASE mydb;USE mydb;drop table if exists vaccunit;CREATE TABLE vaccunit (vid INT AUTO_INCREMENT PRIMARY KEY,unitname VARCHA…

合众伟奇加入飞桨技术伙伴计划,共建“AI+数智化服务”科技创新发展格局

近日,北京合众伟奇科技股份有限公司正式加入飞桨技术伙伴计划,双方将共同努力在电力能源、工业制造等行业的AI技术应用及生态建设上做出贡献,致力构建“AI数智化服务”发展新模式,助力客户业务信息化、数字化、智能化升级。 北京合…