我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

    

内存管理技术,即内存的申请和释放,使用X-CTR100处理器STM32F4自身带的192K Byte 内存,实现了内存动态申请和释放。

原理

内存管理是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。

常用C语言内存管理函数为malloc 和free,malloc函数用于内存申请,free函数用于内存释放。

软件生态

X-SOFT软件生态,X-API扩展文件如下。

ax-mem.c —— 内管管理操作源文件

ax-mem.h——内存管理接口头文件

内存管理是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。

常用C语言内存管理函数为malloc 和free,malloc函数用于内存申请,free函数用于内存释放。

//内存管理函数声明

void AX_MEM_Init(void); //MEM 初始化内存池

u8 AX_MEM_GetUsage(void); //MEM 获取内存使用率

void *AX_MEM_Malloc(u32 size); //MEM 分配内存

void AX_MEM_Free(void *sadr); //MEM 释放内存

STM32F407VET6 内存大小192K RAM,包含128K普通内存和64KCCM内存,默认设定管理最大64KRAM,可通过宏定义修改大小。

//内存参数设定,STM32F407VET6 内存大小192K RAM,包含128K普通内存和64KCCM内存。

//设定管理最大64KRAM

字节

#define AX_MEM_POOLSIZE             64*1024                      //最大管理内存 64K

#define AX_MEM_TABLESIZE     AX_MEM_POOLSIZE/AX_MEM_BLOCKSIZE      //内存表大小

例程

本例程实现内存管理测试,首先进行内存申请,并写入申请的内存,获取内存使用率显示。释放内存,再次获取内存使用率并显示。

硬件说明

硬件资源:

  • 串口UART1

硬件连接:

使用MicroUSB数据线连接X-CTR100 COM接口。

软件生态

X-SOFT软件生态,X-API扩展文件如下。

ax-mem.c —— 内管管理操作源文件

ax-mem.h——内存管理接口头文件

内存管理是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。

常用C语言内存管理函数为malloc 和free,malloc函数用于内存申请,free函数用于内存释放。

//内存管理函数声明

void AX_MEM_Init(void); //MEM 初始化内存池

u8 AX_MEM_GetUsage(void); //MEM 获取内存使用率

void *AX_MEM_Malloc(u32 size); //MEM 分配内存

void AX_MEM_Free(void *sadr); //MEM 释放内存

STM32F407VET6 内存大小192K RAM,包含128K普通内存和64KCCM内存,默认设定管理最大64KRAM,可通过宏定义修改大小。

//内存参数设定,STM32F407VET6 内存大小192K RAM,包含128K普通内存和64KCCM内存。

//设定管理最大64KRAM

字节

#define AX_MEM_POOLSIZE             64*1024                      //最大管理内存 64K

#define AX_MEM_TABLESIZE     AX_MEM_POOLSIZE/AX_MEM_BLOCKSIZE      //内存表大小

软件说明

主程序调用内存管理相关函数实现。

主程序代码如下。

int main(void)

{    

    uint8_t temp =15;

    uint8_t *p=0;

    

    //X-CTR100初始化

    AX_Init(115200);

    printf("***X-CTR100 内存管理例程***\r\n\r\n");

    //内存池初始化

    AX_MEM_Init();

    

    //***内存函数应用测试

    //申请2K内存空间,写入内容并显示

    p = AX_MEM_Malloc(2048);

    if(p!=NULL)

        sprintf((char*)p,"X-CTR100 Memory Malloc Test %03d\r\n",temp);    //向内存写入内容

    printf("内存写入内容:%s",p);    //显示写入的内容

    //显示显示内存使用率

    temp = AX_MEM_GetUsage();

    printf("内存使用率:%d%% \r\n",temp);    

    //释放内存

    AX_MEM_Free(p);

//显示显示内存使用率

    temp = AX_MEM_GetUsage();

    printf("释放后内存使用率:%d%% \r\n",temp);    

    

    while (1)

    {

        AX_Delayms(200);

        AX_LEDG_Toggle();

    }

}

实现效果

实现效果如下图所示。

    

玩转X-CTR100 | STM32F4 l Malloc内存管理的更多相关文章

  1. lua内存管理

    本文内容基于版本:Lua 5.3.0 Lua内存管理器规则 Lua允许用户自定义内存管理器,并在创建Lua虚拟机(lua_State实例)时传入.当然自定义内存管理器必须遵循Lua已定义的一些行为规则 ...

  2. 玩转Linux之内存管理-free

    玩转Linux之内存管理-free free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之 ...

  3. 使用STM32F4的CCM内存

    使用STM32F4的CCM内存http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=604814&fromuid ...

  4. Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解

    C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...

  5. 内存管理运算符new delete与内存管理函数malloc free的区别——已经他们对对象创建的过程。

    (1)内存管理函数与内存管理运算符的区别 内存管理函数有内存分配函数,malloc calloc realloc 以及内存释放函数free. 内存管理运算符有new 和delete. 两种内存管理方式 ...

  6. <转载>内存管理内幕-动态分配的选择、折衷和实现 对malloc内存分配有个简单的描述,对内存管理有个大致的说明

    这篇文章看后感觉不错,和我在glibc下的hurdmalloc.c文件里关于malloc的实现基本意思相同,同时,这篇文章还介绍了一些内存管理方面的知识,值得推荐. 原文链接地址为:http://ww ...

  7. 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现

    http://blog.csdn.net/pi9nc/article/details/23334659 注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料 ...

  8. malloc内存分配与free内存释放的原理

    malloc内存分配与free内存释放的原理 前段时间一直想看malloc的原理,在搜了好几篇malloc源码后遂放弃,晦涩难懂. 后来室友买了本深入理解计算机系统的书,原来上面有讲malloc的原理 ...

  9. Linux内存管理 (8)malloc

    专题:Linux内存管理专题 关键词:malloc.brk.VMA.VM_LOCK.normal page.special page. 每章问答: malloc()函数是C函数库封装的一个核心函数,对 ...

随机推荐

  1. Oracle 存储过程入门(一)

    一,基本入门介绍 公司系统需要用到oracle,可是还没在项目用过oracle,好吧,从基本学起.有问题的地方,欢迎指导啊. 看创建存储过程的基本定义.注意,带有[]的都是可选的,可有可无的.只是语法 ...

  2. require的shim解释

    通过require加载的模块一般都需要符合AMD规范即使用define来申明模块,但是部分时候需要加载非AMD规范的js,这时候就需要用到另一个功能:shim,shim解释起来也比较难理解,shim直 ...

  3. MOOC_Java进阶_翁恺讲_第三周题

    package mooc_java进阶_d3周题; /** * 没有使用HashMap */ import java.util.ArrayList; import java.util.Scanner; ...

  4. 又见链表 --- 另一种Creat方式与反转

    链表 作为一种数据结构,链表以其方便的增删查改功能,实现了无数经典有用的程序. 在之前的帖子里,我构建链表的方式是建立一个不储存数据的head节点,然后通过一边输入数据一边建立结点的方式构建整个链表. ...

  5. MySql 插入数据返回数据的Id值

    insert into addeditemgroup(addeditemgroupname) value(') ; select @@IDENTITY  as id; 返回最新的Id:

  6. axios post请求报错

    问题描述: vue中使用axios提交post请求, 请求地址及参数都对, 但是一直报缺少参数的错误 探索:对比post请求数据, 提交数据的方式不对 (1)axios的post请求(返回响应缺少参数 ...

  7. Maven java.lang.OutOfMemeoryError 问题

    设置MAVEN_OPTS环境变量的值为:-Xms128m -Xmx512m Java默认的最大可用内存往往不能够满足Maven运行的需要 比如在项目较大时,使用Maven生成项目站点需要占用大量的内存 ...

  8. go 接口

    1. package main import ( "fmt" ) type Phone interface { call() } type NokiaPhone struct { ...

  9. Android 实现文件上传功能(upload)

    文 件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的.下面是一个模拟网站程 序上传文件的例子.这里只写出了Android部分的 ...

  10. vsftpd配置手册(实用)

    作者: 木頭    来源: PHPChina 开源社区门户1.vsftpd配置参数详细整理 #接受匿名用户 anonymous_enable=YES #匿名用户login时不询问口令 no_anon_ ...