您的位置 首页 电子

ARM裸机开发中内存办理库RT_HEAP的运用

在使用arm芯片进行裸机开发的时候,很多时候都需要内存管理的功能,我们可以使用自己写的内存管理程序,也可以直接使用标准库,不过我…

在运用arm芯片进行裸机开发的时分,许多时分都需求内存办理的功用,咱们可以运用自己写的内存办理程序,也可以直接运用规范库,不过我一般比较喜爱规范库,速度快,今日就来说说在C言语环境下怎么样进行内存的动态运用

首要,应该初始化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_LENGTHunsigned __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文件哦

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/265164.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部