版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
读写NAND
Flash实验“第六章《GD32F3开发进阶教程——基于GD32F303ZET6》01实验内容本章的主要内容是介绍分块式内存管理的原理,包括内存池、内存管理表和内存的分配释放原理,掌握动态内存管理方法。最后,基于GD32F3苹果派开发板设计一个内存管理实验,通过LCD屏上的GUI界面实现动态内存管理,并在屏幕上使用文字和波形图实时显示内存使用率。实验内容02实验原理内存管理是指,在软件运行时,对内存资源的分配和使用,以高效、快速地对内存进行分配,并且在适当的时候释放内存资源。在GD32F3苹果派开发板上,内存的分配与释放最终由两个函数实现:malloc函数用于申请内存,ee函数用于释放内存。虽然C标准库中已经实现了这两个函数,但是C语言动态分配的内存堆区分配在内部SRAM中为了充分利用外部SRAM,本章编写了一种内存管理机制,使用“分块式内存管理”技术,在占用尽可能少的内存的情况下,实现内存动态管理。分块式内存管理原理分块式内存管理原理如图6-1所示,分块式内存管理由内存池和内存管理表两部分组成。内存池被等分为n块,对应的内存管理表大小也被分为n项,每一项对应内存池的一块内存。010203分配原理释放原理内存泄漏分块式内存管理原理04内存分配与释放操作界面分块式内存管理原理本章实验的LCD显示模块的GUI界面布局如图6-2所示。内存分配与释放流程本实验内存分配与释放的流程图如图6-3所示。首先初始化内外部SRAM和GU界面,初始化相应的内存池。010203进入GUI界面后,当InSRAM按被按下时,程序将调用内部SRAM申请内存的函数InSramMallcCallback。当EXSRAM按钮被按下时,程序将调用外部SRAM申请内存按钮回调函数ExSramMalleCallback。当Free按钮被按下时,程序将调用内存释放按回调函数FreeCallback。内存分配与释放流程03实验代码解析1.Malloc.h文件在Malloc.h文件的“宏定义”区,首先定义了内存池及内存管理的相关参数。下面按照顺序解释说明其中的语句。(1)第2至4行代码:本实验需要管理的是内部和外部SRAM,因此将内部SRAM内存池定义为0,外部SRAM内存池定义为1,总共支持的SRAM块数为2。(2)第6至13行代码:定义了内存管理的相关参数其中MEMxBLOCKSIZE为内存块大小,是内存分配时的最小单元。MEMxMAXSIZE为最大管理内存的大小,取值必须小于当前SRAM可用内存。MEMxALLOCTABLESIZE为内存管理表的大小,计算方式为管理内存的大小除以每个内存块的大小。Malloc文件对下面按照顺序解释说明其中的语句。(1)第3行代码mit为指向内存初始化的函数指针,用于初始化内存管理,形参表示需要初始化的内存片。(2)第4行代码:perused为指向内存使用率函数的函数指针,用于获取内存使用率,形参表示要获取内存使用率的内存片。(3)第5行代码:memoryBase为指向内存池的指针,最多有SRAMBANK个内存池本实验定义为2。(4)第6行代码:memoryMap为指向内存管理表的指针。(5)第7行代码:memoryRdy为内存管理表就绪标志,用于表示内存管理表是否已经初始化。Malloc文件对在Malloc.c文件的“内部变量定义”区,首先定义了内存池、内存管理表所在地址,以及内存管理的相关参数。下面按照顺序解释说明其中的语句。(1)第2至7行代码:内存池中使用了两部分内存池,一部分是开发板内部SRAM内存池,由编译器随机分配。另一部分则使用外部扩展的SRAM内存池,用atribute机制指定内存所在的地址,需要确保内存池与内存管理表均在外部SRAM中。两部分内存池均需要使用align关键字进行32字节对齐,以提高访问效率。(2)第10至12行代码:写入内存管理的相关参数,包括每个内存表的大小,内存分块的大小及需要管理的总内存大小。(3)第15至25行代码:初始化sstructMallocDev结构体,并且按照结构体的顺序为结构体成员赋值。Malloc文件对2.Malloc.c文件注意,内存释放并不清除对应内存池中的内容,而是在内存管理表中标记该内存块为未使用,可以再次对该内存块写入数据,写入数据将覆盖原内容。在“API函数实现”区,首先实现了InitMemory函数。该函数用于将参数memx所指定的内存池中的数据清零,并将memoryRdy标志置为1。在InitMemory函数后的MemoryPerused函数用于获得内存使用率。MemoryPerused函数通过统计其参数memx所指定的内存管理表上项值不为0的块来获得总使用率并与内存块总数相除,在百分比的基础上再扩大10倍,最终返回的数值为0~1000代表使用率为0.0%~100.0%。Malloc文件对MyMalloc函数后的MyRealloc函数用于重新分配内存。函数的参数:memx为所属内存块;ptr为内存首地址;size为内存大小,单位为字节。重新分配内存函数一般是对给定的指针所指向的内存空间进行扩大或缩小,在本实验中暂未使用。Malloc文件对0102MallocTop.h文件:在MallocTop.h文件的“API函数声明”区,声明了2个API函数。MallocTop.c文件:在MallocTop.c文件的“宏定义”区,首先定义了每次内存申请量。MallocTop文件对下面按照顺序解释说明这两个函数中的语句。(1)第4行代码:调用MyMalloc函数来申请内部SRAM中的内存,并将该内存的首地址赋值给指针spMalloc。(2)第5行代码:更新内外部SRAM访问标志sointerPlace,以0标识目前指针指向内部SRAM。(3)第6行代码:调用printf函数,通过串口输出指针数值。(4)第9行代码:调用updateMamInfoShow函数更新内存显示信息。(5)第12至21行代码:将相关参数替换为外部SRAM。MallocTop文件对该函数为内存释放按钮回调函数每次单击屏幕上的Free按钮,都会调用FreeCallback函数来释放内存。(1)第4行代码:判断指针所处的位置是否处于内部SRAM中。(2)第7行代码:调用MyFree函数对指针所指向的连续内存块进行释放。内存释放后spMalloc指针并不会更新,因此只能释放对应上一次申请的内存。(3)第10行代码:调用updateMamInfoShow函数更新内存显示信息。(4)第14至21行代码:将相关参数替换为外部SRAM。MallocTop文件对在FreeCallback函数后的updateMamInfoShow函数用于更新GUI上方的内存信息显示,包括内存用量、剩余内存等,参数mem为内部或外部SRAM标志。(1)第4行代码:定义usage和ee变量,分别用于存储内存使用量与剩余量。(2)第7行代码:判断需要更新的内存块是否为内部SRAM。(3)第10行代码:调用MemoryPerused函数计算使用率,将其返回值赋值给uage变量。MallocTop文件对(4)第13至19行代码:由于MemoryPerused计算结果在百分比的基础上扩大了10倍(0~1000,代表0.0%~100.0%),因此将usage除以1000后再与MEM1MAXSIZE相乘得到字节使用量,并对该运算结果向上取整。(5)第22行代码:将所有内存的字节数减去已使用的字节数,得到剩余字节数。(6)第25行代码:调用在GUITopc文件中实现的updateInSRAMInfo函数,可计算得出的内存用量及剩余内存,更新至GUI上方的文字信息显示区域。MallocTop文件对Main.c文件Proc2msTask函数的实现代码如程序清单6-24所示,调用了MallocTopTask函数,该函数每20ms执行一次内存管理实验顶
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026风力发电机叶片行业竞争格局分析及投资风险评估规划分析研究报告
- 2026非洲智能农业无人机行业市场现状供需分析及投资评估规划分析研究报告
- 2026-2030微晶纤维素市场发展现状调查及供需格局分析研究报告
- (完整版)水利工程废渣处理专项安全文明施工方案
- 建筑工地安全文明施工通讯稿范例
- 2026广东湛江市廉江市第七批兜底安置类公益性岗位招聘4人备考题库及参考答案详解一套
- 2026浙江台州市玉环市招聘事业编制教师98人备考题库(第二批)参考答案详解
- 2026河南洛阳市东明外语实验学校招聘备考题库参考答案详解
- 2026资阳发展投资集团有限公司选聘资阳苌润资产管理有限公司总经理1人备考题库及参考答案详解
- 2026西高院(西安电瓷研究所)社会招聘2人备考题库带答案详解
- 2025 年咸宁市中小学教师职称水平能力测试(综合能力)强化练习(含答案)
- 2026春季学期国家开放大学专科《液压与气压传动》一平台在线形考形考任务+实验报告试题及答案
- 医疗废物泄漏应急处置
- 某大学学前教育招生宣传
- 四年级下册综合实践期末测试题及答案
- 医疗数据隐私计算:技术路径与应用场景
- 2025 年大学化学(分析化学)下学期期末测试卷
- 2025年幼儿园五年发展规划
- 小班科学课件《雨伞家族》
- 五皇山缆车施工方案
- 邮政机要通信安全培训课件
评论
0/150
提交评论