ARM裸机开发中内存管理库RT_HEAP的使用
2015-04-18 21:25
836 查看
在使用arm芯片进行裸机开发的时候,很多时候都需要内存管理的功能,我们可以使用自己写的内存管理程序,也可以直接使用标准库,不过我一般比较喜欢标准库,速度快,今天就来说说在C语言环境下怎么样进行内存的动态使用
首先,应该初始化C堆,初始化代码如下
这里面主要是几个工作,一个是导入运行库,第二是初始化C堆,其中定义了两个宏MALLOC_HEAP_ADDRESS_START和MALLOC_HEAP_ADDRESS_END
指示的是我们管理的堆的开始地址和结束地址,我的使用是这样(根据实际情况来)
这时候一般还不能编译过去,因为还需要一个错误报告函数,也就是库出现问题的时候把错误信息反馈出来的方式,一般可以选择串口打印,如下
这样就能够同时支持printf和动态内存管理了,
到这里,malloc和free函数就能够正常使用了,记得包含stdlib.h文件哦
首先,应该初始化C堆,初始化代码如下
#include "malloc.h" #pragma import (__use_realtime_heap) //这个函数在rt_heap.h中声明,需要用户自己去实现,返回任意值 unsigned __rt_heap_extend(unsigned size, void **block) { return 0; } void MallocInit(void) { _init_alloc(MALLOC_HEAP_ADDRESS_START,MALLOC_HEAP_ADDRESS_END); //初始化堆的范围 }
这里面主要是几个工作,一个是导入运行库,第二是初始化C堆,其中定义了两个宏MALLOC_HEAP_ADDRESS_START和MALLOC_HEAP_ADDRESS_END
指示的是我们管理的堆的开始地址和结束地址,我的使用是这样(根据实际情况来)
#define MALLOC_HEAP_ADDRESS_START SDRAM_BASE_ADDR #define MALLOC_HEAP_ADDRESS_END SDRAM_BASE_ADDR+SDRAM_LENGTH unsigned __rt_heap_extend(unsigned size, void **block); void MallocInit(void);
这时候一般还不能编译过去,因为还需要一个错误报告函数,也就是库出现问题的时候把错误信息反馈出来的方式,一般可以选择串口打印,如下
//加入以下代码,支持printf函数,而不需要选择use MicroLIB #pragma import(__use_no_semihosting) //标准库需要的支持函数 struct __FILE { int handle; }; FILE __stdout; //定义_sys_exit()以避免使用半主机模式 _sys_exit(int x) { x = x; } _ttywrch(int ch)//这里就是我们要实现 { ch = ch; } //重定义fputc函数 int fputc(int ch, FILE *f) { while((USART1->SR&0X40)==0);//循环发送,直到发送完毕 USART1->DR = (u8) ch; return ch; }
这样就能够同时支持printf和动态内存管理了,
到这里,malloc和free函数就能够正常使用了,记得包含stdlib.h文件哦
相关文章推荐
- Eclipse开发调试ARM裸机程序(三)C语言LED_LINUX使用DNW
- Android开发Eclipse中DDMS中Heap使用及GC_EXTERNAL_ALLOC含义 分类: android Eclipse 内存管理 2012-09-24 11:05 1214人阅读
- ARM裸机程序开发12指令条件码的使用
- Eclipse开发调试ARM裸机程序
- Eclipse开发调试ARM裸机程序(二)LED_从ARM到GNU
- Eclipse开发调试ARM裸机程序(四)赤裸裸的代码拷贝
- Eclipse开发调试ARM裸机程序(五)MMU调试
- 使用eclipse建立ARM开发环境
- Eclipse开发调试ARM裸机程序(六)关于裸机调试i2c记录
- Eclipse开发调试ARM裸机程序(七)LCD
- Eclipse开发调试ARM裸机程序(七)sd卡读写
- Linux下ARM裸机开发环境搭建与实例
- 一起学mini2440裸机开发(九)--ARM中断控制系统
- 使用Eclipse开发Arm-linux程序
- 只用串口和网络裸机开发ARM程序(OK6410开发板)
- Linux下arm裸机开发环境搭建与实例
- arm裸机开发环境————windows与linux下对比
- ubuntu下使用eclipse c/c++开发arm linux程序
- iphone开发中使用nib(xib)文件的内存管理
- iphone开发中使用nib(xib)文件的内存管理