RT1052+内存管理的实现与测试

前面测试下基本的外设使用情况,都是基于KEIL的SDRAM_DEBUG例程,不得不吐槽下KEIL ARM Compiler V5编译器的编译速度,每次CPU百分百占用,卡机。V6编译器出来也很久了,不兼容之前的一些设置真的很蛋疼,不然可以快上好几个档次。其实IAR挺好用的,但是我的IAR 用了几天CMSISDAP就连不上,真是蛋疼,有没有道友指导下,每此弹出连不上设备是什么鬼问题。
言归正传,今天学习下内存管理,
因为我跑的都是SDRAM_DEBUG的版本,所以只要查看工程目录下MIMXRT1052xxxxx_sdram文件就可以看到全部的内存分配情况,其他版本查看对应的文件即可。这里我将m_data_size缩减了1MB用于之后的内存分配,所以看起来32MB的SDRAM内存分配是不连续的,0x80000000~0x81D00000, 0x81E00000~0x82000000

<ignore_js_op>

中间那段0x81D00000~0x81E00000用于我自己的内存管理,内存管理的配置表也放在这个位置,所以内存池最大其实没有1MB,需要减去配置表。
<ignore_js_op>

<ignore_js_op>

内存分配函数的实现,是从头开始查找配置,找到一块连续的内存
<ignore_js_op>

释放函数的实现。
<ignore_js_op>

测试结果如下,初始化之后配置表的数据都为0,所以是都没被占用
<ignore_js_op>

申请512B内存写入1,可以看到配置表前八个数据是8, 因为每个内存块大小是64B,512B只需要8个内存块, 申请到的内存地址开始数据也都被写入
<ignore_js_op>

再次申请256B内存写入,配置表数据和申请到的内存数据都更新了。
<ignore_js_op>

释放第一次申请的内存,配置表清0,内存地址的数据因为我没有清零,所以还是之前写入的,但不影响
<ignore_js_op>

重新申请128B内存,可以看到他是从头开始的,写入也成功了。
<ignore_js_op>

最后释放掉,配置表都被清零了。
<ignore_js_op>

内存管理也可以调用编译器的malloc和free函数,自己写的话如果以后遇到内存溢出越界等问题,就比较容易找到问题。所以还是比较实用的吧

posted on 2022-06-15 22:12  张凌001  阅读(455)  评论(0编辑  收藏  举报

导航