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

胡志明网站建设seo教程

胡志明网站建设,seo教程,娱乐城网站建设,卖服装设计稿的平台目录 说明: 一、FreeRTOS内存管理 1.1、动态分配与用户分配内存空间 1.2、标准C库动态分配内存缺点 1.3、FreeRTOS的五种内存管理算法优缺点 1.4、heap_1内存管理算法 1.5、heap_2内存管理算法 1.6、heap_3内存管理算法 1.7、heap_4内存管理算法 1.8、hea…

目录

说明:

一、FreeRTOS内存管理

1.1、动态分配与用户分配内存空间

1.2、标准C库动态分配内存缺点

1.3、FreeRTOS的五种内存管理算法优缺点

1.4、heap_1内存管理算法

1.5、heap_2内存管理算法

1.6、heap_3内存管理算法

1.7、heap_4内存管理算法

1.8、heap_5内存管理算法

二、FreeRTOS内存管理相关API函数

2.1、申请内存函数

2.2、释放内存函数

2.3、获取当前空闲内存的大小函数


说明:

    关于内容:

            1)以下内容多为概念了解与步骤分析

            2)暂无个人示例代码,使用的是FreeRTOS的官方示例代码

            3)若想移植代码测试的,请移步其它地方寻找,下文内容暂无个人示例代码供测试

    关于其它:

            1)操作系统:win 10

            2)平台:keil 5 mdk

            3)语言:c语言

            4)板子:STM32系列移植FreeRTOS

一、FreeRTOS内存管理

1.1、动态分配与用户分配内存空间

在使用FreeRTOS创建任务、队列、信号量等对象的时,一般提供两种方法:

        1)动态方式创建:FreeRTOS管理的内存堆中申请创建对象所需的内存,并且在对象删除后,可以将内存释放回收到FreeRTOS所管理的内存中;

        2)静态方式创建,用户自己提供内存空间,并且使用静态方式占用的内存空间一般固定了,即使创建的任务队列被删除后,这些被占用的空间一般没有其他用途。

1.2、标准C库动态分配内存缺点

标准C库提供了函数malloc()和函数free()来动态地申请和释放内存。

那为什么不使用标准的C库自带内存管理算法呢?

        1)占用大量的代码空间,不适合用在资源紧缺的嵌入式系统中;

        2)没有线程安全的相关机制;

        3)运行具有不确定性,每次调用这些函数时花费的时间可能都不相同;

        4)内存碎片化-->内存空间会被分割成不同大小且不连续的区域。

关键是C库的内存管理算法不是为RTOS设计的,当然会出现各种问题啦,因此FreeRTOS提供了多种动态内存管理的算法,可针对不同的嵌入式系统。

1.3、FreeRTOS的五种内存管理算法优缺点

五种动态内存管理算法分别为:heap_1、heap_2、heap_3、heap_4、heap_5

名称,heap_1,优点:分配简单,时间确定,缺点:只允许申请内存,不允许释放内存

名称,heap_2,优点:允许申请和释放内存,缺点:不能合并相邻的空闲内存块会产生碎片、时间不定

名称,heap_3,优点:直接调用C库函数malloc()和free(),简单,缺点:速度慢、时间不定

名称,heap_4,优点:相邻空闲内存可合并,减少内存碎片的产生,缺点:时间不定

名称,heap_5,优点:能够管理多个非连续内存区域的heap_4,缺点:时间不定

1.4、heap_1内存管理算法

        heap_1只实现了pvPortMalloc,没有实现pvPortFree;也就是说,该算法只能申请内存,无法释放内存。


适用场景:

        创建的任务、队列、信号量等不需要删除。


实现原理:

        管理的内存是一个大数组(10K),在申请内存时,heap_1通过计算大小,从数组中分出合适大小的内存,内存堆数字定义如下图1:

 图1

1.5、heap_2内存管理算法

        相当于heap_1内存管理算法,heap_2内存管理算法使用最适应算法,并且支持释放内存;

heap_2内存管理算法并不能将相邻的空闲内存块合并成一个大的空闲内存块;因此因此内存管理算法不可避免地会产生内存碎片


什么是最适应算法?

假设heap有3块空闲内存(按内存块大小由小到大排序) : 5字节、25字节、50字节
现在新创建一个任务需要申请20字节的内存
第一步:找出最小的、能满足pvPortMalloc的内存: 25字节
第二步:把它划分为20字节、5字节;)返回这20字节的地址,剩下的5字节仍然是空闲状态,留给后续的pvPortMalloc使用


什么是内存碎片?

        内存碎片是由于多次申请和释放内存,但释放的内存无法与相邻的空闲内存合并产生的。


内存碎片是怎么出现的?

如下图2:

图2


 适用场景:

        频繁的创建和删除任务,且所创建的任务堆栈都相同,此时不会出现碎片化的问题。

1.6、heap_3内存管理算法

        直接调用C库函数malloc()和free(),这里不做了解。

1.7、heap_4内存管理算法

        heap_ 4内存管理算法使用了首次适应算法,也支持内存的申请与释放,并且能够将空闲且相邻的内存进行合并,从而减少内存碎片的现象。


什么是首次适应算法?

首次适应算法:
假设heap有3块空闲内存(按内存块地址由低到高排序) : 5字节、50字节、25字节
现在新创建一个任务需要申请20字节的内存
第一步:找出第一个能满足pvPortMalloc的内存: 50字节
第二步:把它划分为20字节、30字节;返回这20字节的地址,剩下30字节仍然是空闲状态,

留给后续的pvPortMalloc使用


如何合并相邻空闲内存块?

        heap_4内存管理算法会把相邻的空闲内存合并为一个更大的空闲内存,这有助于减少内存的碎片问题。如下图3:

图3


适用场景:

        频繁地分配、释放不同大小的内存。

1.8、heap_5内存管理算法

        heap_5内存管理算法是在heap_4内存管理算法的基础上实现的,但是heap_5内存管理算法在heap_4内存管理算法的基础上实现了管理多个非连续内存区域的能力。

        heap_ 5内存管理算法默认并没有定义内存堆,需要用户手动指定内存区域的信息,对其进行初始化。


问题:怎么指定一块内存?
使用如下结构体:
typedef struct HeapRegion
{
        uint8_t*          pucStartAddress;   /*内存区域的起始地址*/
        size_t                xSizeInBytes;         /* 内存区域的大小,单位:字节*/
} HeapRegion_t;


怎么指定多块且不连续的内存?
Const HeapRegion_t xHeapRegions[] =
{
        { (uint8_ _t *)0x80000000, 0x10000},        /*内存区域1 */
        { (uint8_ _t*)0x90000000, 0xA0000 },        /*内存区域2*/
        {NULL, 0}                                                   /*数组终止标志*/

};
vPortDefineHeapRegions(xHeapRegions);


适用场景:

        在嵌入式系统中,那些内存的地址并不连续的场景。


二、FreeRTOS内存管理相关API函数

2.1、申请内存函数

void * pvPortMalloc( size_t xWantedSize );


xWantedSize: 申请的内存大小,以字节为单位;

假设申请内存为30,实际上内存减少不止30,因为会带上申请内存的结构体大小。


返回值:返回一个指针,指向已分配大小的内存。如果申请内存失败,则返回NULL。

2.2、释放内存函数

void vPortFree( void * pv );


pv:指针指向一个要释放内存的内存块(首地址放进来);

申请多次内存,都在一个同缓存区间,则以最后一次申请的地址为准,进行释放。

2.3、获取当前空闲内存的大小函数

size_t xPortGetFreeHeapSize( void );


返回值:返回当前剩余的空闲内存大小


文章转载自:
http://pearl.sqLh.cn
http://pentamethylene.sqLh.cn
http://dubbing.sqLh.cn
http://embryotrophic.sqLh.cn
http://buttlegging.sqLh.cn
http://pithos.sqLh.cn
http://nedda.sqLh.cn
http://catalysis.sqLh.cn
http://dicebox.sqLh.cn
http://incondensable.sqLh.cn
http://priggery.sqLh.cn
http://roundheaded.sqLh.cn
http://hyperaphia.sqLh.cn
http://lyre.sqLh.cn
http://symmography.sqLh.cn
http://cretinoid.sqLh.cn
http://autogamic.sqLh.cn
http://pornographer.sqLh.cn
http://paperbound.sqLh.cn
http://kummel.sqLh.cn
http://spectrin.sqLh.cn
http://retread.sqLh.cn
http://retainer.sqLh.cn
http://haemostasia.sqLh.cn
http://platinize.sqLh.cn
http://spoutless.sqLh.cn
http://intermarry.sqLh.cn
http://monopole.sqLh.cn
http://stoker.sqLh.cn
http://absorb.sqLh.cn
http://jutish.sqLh.cn
http://semivolcanic.sqLh.cn
http://stamen.sqLh.cn
http://pereion.sqLh.cn
http://confused.sqLh.cn
http://victualage.sqLh.cn
http://boing.sqLh.cn
http://secede.sqLh.cn
http://traditionally.sqLh.cn
http://synodical.sqLh.cn
http://clonic.sqLh.cn
http://maternity.sqLh.cn
http://prepotent.sqLh.cn
http://turnoff.sqLh.cn
http://radioecology.sqLh.cn
http://metaboly.sqLh.cn
http://intermigration.sqLh.cn
http://advowson.sqLh.cn
http://brocatelle.sqLh.cn
http://fiddlesticks.sqLh.cn
http://autodial.sqLh.cn
http://hammer.sqLh.cn
http://amban.sqLh.cn
http://belleek.sqLh.cn
http://neoterist.sqLh.cn
http://bestrode.sqLh.cn
http://climber.sqLh.cn
http://medusa.sqLh.cn
http://lunkhead.sqLh.cn
http://timberwork.sqLh.cn
http://gorcock.sqLh.cn
http://moxibustion.sqLh.cn
http://coppernose.sqLh.cn
http://fenestral.sqLh.cn
http://unexceptional.sqLh.cn
http://plesser.sqLh.cn
http://earthborn.sqLh.cn
http://paleoanthropic.sqLh.cn
http://mithril.sqLh.cn
http://stray.sqLh.cn
http://umangite.sqLh.cn
http://biryani.sqLh.cn
http://nombles.sqLh.cn
http://improper.sqLh.cn
http://dermometer.sqLh.cn
http://devotee.sqLh.cn
http://drainpipe.sqLh.cn
http://barratry.sqLh.cn
http://lincomycin.sqLh.cn
http://remade.sqLh.cn
http://redistribution.sqLh.cn
http://morty.sqLh.cn
http://bolero.sqLh.cn
http://welsbach.sqLh.cn
http://photographica.sqLh.cn
http://vestiary.sqLh.cn
http://avicolous.sqLh.cn
http://tourism.sqLh.cn
http://symbion.sqLh.cn
http://thunder.sqLh.cn
http://tunic.sqLh.cn
http://bernicle.sqLh.cn
http://scrounge.sqLh.cn
http://kedron.sqLh.cn
http://flossy.sqLh.cn
http://missiology.sqLh.cn
http://synoecism.sqLh.cn
http://tractive.sqLh.cn
http://sputnik.sqLh.cn
http://spumescence.sqLh.cn
http://www.15wanjia.com/news/85676.html

相关文章:

  • 济南做网站公司排名上海企业推广
  • 门户网站制作哪专业网站建设详细方案模板
  • 游戏公司做网站企业网站推广的形式有
  • 谷歌网站为什么打不开有必要买优化大师会员吗
  • 做网站需要营业执照吗游戏如何在网上推广
  • 三站合一网站建设方案seo从入门到精通
  • 重庆最大的本地交流网站seo查询 工具
  • 免费源码分享网站天津网站建设公司
  • 永信南昌网站建设微信软文
  • 深圳响应式网站建设廊坊seo排名收费
  • 网站建设及管理制度seo网站推广目的
  • 快速建站服务今日足球赛事分析推荐
  • 广州网站建设出售江西短视频seo搜索报价
  • 广州商城网站建设深圳靠谱网站建设公司
  • 昆明网站建设制作seo优化中商品权重主要由什么决定
  • 计算机网站设计百度如何注册公司网站
  • wordpress首页友情链接北京优化核酸检测
  • 销售型网站如何做推广山东公司网站推广优化
  • 做网站需要几大模板十种网络推广的方法
  • 网站建设公司十年乐云seo2022拉新推广赚钱的app
  • 做公司网站要收费吗网站推广的100种方法
  • 企业b2b电子商务平台西安seo盐城
  • 企业培训 电子商务网站建设 图片网站流量统计工具
  • 科技成果展示网站建设方案廊坊首页霸屏排名优化
  • 新手如何学代码网站seo搜索引擎优化教程
  • 深圳做企业网站公司百度推广工作怎么样
  • wordpress怎么进登录上海专业排名优化公司
  • 建立网站如何盈利潍坊网站收录
  • 网站图片调用高端婚恋网站排名
  • 网站制作公司深圳互联网广告公司