玩转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_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内存管理的更多相关文章
- lua内存管理
本文内容基于版本:Lua 5.3.0 Lua内存管理器规则 Lua允许用户自定义内存管理器,并在创建Lua虚拟机(lua_State实例)时传入.当然自定义内存管理器必须遵循Lua已定义的一些行为规则 ...
- 玩转Linux之内存管理-free
玩转Linux之内存管理-free free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之 ...
- 使用STM32F4的CCM内存
使用STM32F4的CCM内存http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=604814&fromuid ...
- Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解
C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...
- 内存管理运算符new delete与内存管理函数malloc free的区别——已经他们对对象创建的过程。
(1)内存管理函数与内存管理运算符的区别 内存管理函数有内存分配函数,malloc calloc realloc 以及内存释放函数free. 内存管理运算符有new 和delete. 两种内存管理方式 ...
- <转载>内存管理内幕-动态分配的选择、折衷和实现 对malloc内存分配有个简单的描述,对内存管理有个大致的说明
这篇文章看后感觉不错,和我在glibc下的hurdmalloc.c文件里关于malloc的实现基本意思相同,同时,这篇文章还介绍了一些内存管理方面的知识,值得推荐. 原文链接地址为:http://ww ...
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
http://blog.csdn.net/pi9nc/article/details/23334659 注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料 ...
- malloc内存分配与free内存释放的原理
malloc内存分配与free内存释放的原理 前段时间一直想看malloc的原理,在搜了好几篇malloc源码后遂放弃,晦涩难懂. 后来室友买了本深入理解计算机系统的书,原来上面有讲malloc的原理 ...
- Linux内存管理 (8)malloc
专题:Linux内存管理专题 关键词:malloc.brk.VMA.VM_LOCK.normal page.special page. 每章问答: malloc()函数是C函数库封装的一个核心函数,对 ...
随机推荐
- 第十一章 非对称加密算法--DH
注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第8章“高等加密算法--非对称加密算法” 11.1.非对称加密算法 特点: 发送方和接收方均有一个密钥对(公钥+私钥),其中公 ...
- mybatis与hibernate常用的持久化类,及sqlsession和sqlsessionTemplate区别
首先, 通过翻阅源码,我们来整理一下mybatis进行持久化操作时重要的几个类:SqlSessionFactoryBuilder:build方法创建SqlSessionFactory实例.SqlSes ...
- C++ 实验2:函数重载、函数模板、简单类的定义和实现
1.函数重载编程 编写重载函数add(),实现对int型,double型,Complex型数据的加法.在main()函数中定义不同类型数据,调用测试. #include <iostream> ...
- Varnish 一般是放在 Nginx 前面还是后面的?
1.varnish官网有写. 如果用ssl前面肯定得有nginx. 如果没有ssl看你实际需求.可以varnish,然后nginx,然后app. 看怎么设计了. 2.Varnish 通常是在两种情况下 ...
- DDSM数据处理之PngWithOverlay 框出病灶区域
修改代码路径 若overlay是某一侧的标注. 文件夹里某一侧的png 应该有对应 某一侧的overlay 这样一一对应才可以使得代码运行. 否则需要手动删除没有overlay的png图片. 左侧没有 ...
- python闭包closure
在讨论闭包之前,先总结一下python的命名空间namespace,一般的语言都是通过namespace来识别名字标识,无论是变量,对象,函数等等.python划分3个名字空间层次,local:局部, ...
- Jmeter 中对响应报文处理后断言用到BeanShell Assertion
Jmeter中常用的断言可以是Response Assertion 如果需要对响应报文中的某个字符串进行解码,对解码之后的值在进行断言要怎么做呢? 仔细观察一下,可以用下面俩个元件 Regular E ...
- java日期操作 大全
先来一个: 取得指定月份的第一天与取得指定月份的最后一天 http://iamin.blogdriver.com/iamin/847990.html )); } ...
- Codeforces 894B - Ralph And His Magic Field
894B - Ralph And His Magic Field 思路: 当k为1时,如果n和m奇偶性不同,那么没有答案. 可以证明,在其他情况下有答案,且答案为2^(n-1)*(m-1),因为前n- ...
- [.NET开发] 浅说C#异步和同步
提到异步,那么与之对应的是什么呢?同步.那么C#的异步和同步是如何工作的呢? 首先,我们先来看看栗子: 新建一个控制台应用程序,在Program文件中添加如下代码: 1 static void Mai ...