玩转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(); } } |
实现效果
实现效果如下图所示。