玩转X-CTR100 | STM32F4 l Malloc内存管理

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 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_BLOCKSIZE             32                          //内存块大小为32字节

#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_BLOCKSIZE             32                          //内存块大小为32字节

#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();

    }

}

实现效果

实现效果如下图所示。

    

posted @ 2018-07-02 08:01  xtarker  阅读(575)  评论(0编辑  收藏  举报