云南企业网站建设wordpress 发邮件设置
- 作者: 五速梦信息网
- 时间: 2026年04月20日 06:54
当前位置: 首页 > news >正文
云南企业网站建设,wordpress 发邮件设置,备案 网站,制作网站报价目录 说明#xff1a; 一、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、heap4内存管理算法 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内存管理算法在heap4内存管理算法的基础上实现了管理多个非连续内存区域的能力。 heap 5内存管理算法默认并没有定义内存堆需要用户手动指定内存区域的信息对其进行初始化。 问题:怎么指定一块内存? 使用如下结构体: typedef struct HeapRegion { uint8_t* pucStartAddress; /内存区域的起始地址/ size_t xSizeInBytes; /* 内存区域的大小单位:字节*/ } HeapRegion_t; 怎么指定多块且不连续的内存? Const HeapRegiont 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 ); 返回值:返回当前剩余的空闲内存大小
- 上一篇: 云南哪里有给做网站的动易网站只能进首页
- 下一篇: 云南企业网站建设有限公司招商加盟网
相关文章
-
云南哪里有给做网站的动易网站只能进首页
云南哪里有给做网站的动易网站只能进首页
- 技术栈
- 2026年04月20日
-
云南旅游网站设计WDCP运行WordPress
云南旅游网站设计WDCP运行WordPress
- 技术栈
- 2026年04月20日
-
云南科技网站建设四博互联做的网站
云南科技网站建设四博互联做的网站
- 技术栈
- 2026年04月20日
-
云南企业网站建设有限公司招商加盟网
云南企业网站建设有限公司招商加盟网
- 技术栈
- 2026年04月20日
-
云南省保山建设网站网站开发工程师资格证
云南省保山建设网站网站开发工程师资格证
- 技术栈
- 2026年04月20日
-
云南省工程建设信息网站山西大同网站建设哪家好
云南省工程建设信息网站山西大同网站建设哪家好
- 技术栈
- 2026年04月20日
