• 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函数,自己写的话如果以后遇到内存溢出越界等问题,就比较容易找到问题。所以还是比较实用的吧
  • 相关阅读:
    搜索框
    鼠标hover时改变图片透明度和颜色(方法二)
    让背景带上颜色
    右侧固定导航栏
    react native环境配置
    左侧固定导航栏
    鼠标hover时改变图片透明度和颜色
    androidSDK配置环境变量
    cordova插件开发
    Python电子书分享
  • 原文地址:https://www.cnblogs.com/zhugeanran/p/16380040.html
Copyright © 2020-2023  润新知