Keil MDK 使用malloc()&free(),stm32简单测试可用
2018-02-03 20:59
405 查看
1.8.9 Using malloc() when exploiting the C library
If heap support is required for bare machine C, you must implement _init_alloc()and
__rt_heap_extend().
_init_alloc()must be called first to supply initial heap bounds, and
__rt_heap_extend()must
be provided even if it only returns failure. Without
__rt_heap_extend(), certain library functionality is included that causes
problems when you are writing bare machine C.
Prototypes for both
_init_alloc()and
__rt_heap_extend()are
in rt_heap.h.
以上摘自http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.comp6/index.html
程序包含头文件:rt_heap.h,stdlib.h。注意不要勾选MicroLIB。
汇编代码中设置Heap大小,我设置为4KB。
Heap_Size EQU 0x00004000
跟高级的方法如下:
简单的测试代码如下:
[cpp] view
plain copy
#define HEAP_BASE 0x20002558
#define HEAP_SIZE 0x00004000
#define HEAP_END HEAP_BASE+HEAP_SIZE
void testmem()
{
int *p,*k=NULL;
int a=0;
volatile int i=0;
_init_alloc(HEAP_BASE,HEAP_END);
while(1)
{
if(a>1000)break;
p=(int*)malloc(a++);
i=(unsigned int)p-(unsigned int)k;
k=p;
*p=a;
//free(p);
}
}
调试可看到如下结果:
其中p,k是两次malloc得到的地址,i为两次得到的mallac得到地址的间隔,需要注意malloc得到的内存是8字节对其的。a是写入的一个数据。该程序执行一段时间后会内存泄漏,因为没free,去掉free()的注释即可。以下是free(p)的调试结果:经过多次malloc后得到的内存地址始终是0x20002570。
总结:
.If
heap support is required for bare machine C, you must implement
_init_alloc()and
__rt_heap_extend().
分配的内存地址8byte对齐;
#define
HEAP_BASE 0x20002558这里的地址可以看*.map文件Heap_Mem的值。这里应该可以通过汇编和C的混合编程来实现,暂时没试。
饿死了,以上暂作笔记用,找时间再整理下测试下
转自:http://blog.csdn.net/janosong/article/details/50222327
相关文章推荐
- Keil MDK 使用malloc()&free(),stm32简单测试可用。
- Google C++测试单元工具 gtest简单使用(win vs & linux)
- 简单测试动态游标(REF CURSOR)的使用
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- 使用简单的J2ME程序测试MIDlet的生命周期
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- 从一个简单程序的GDB调试看段错误,指针的初始化及内存分配(malloc/free)
- 解析SQL注入测试中为什么使用/'or 1=1呢?
- Linux下 mysql & oracle 简单使用手册
- 使用Nginx做简单负载均衡测试
- SSIS--->>>> 图文并貌简单使用for循环容器
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- 数据恢复软件28款简单测试&绿色下载
- python中使用状态机的简单例子---截取'/x00'之前的字符串
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- JBoss下使用标注方式写的一个简单web service 测试
- 使用xml+asp.net打造简单的站点导航&管理站点友情链接