2017-02-11 223 views
0

任何人都可以给我一个示例代码使用malloc分配内存? IDE:mplab x ide 编译器:XC16编译器 MCU:PIC24F如何在mplab x ide,XC16编译器中使用malloc分配内存?

在此先感谢。

+3

看起来像[XY问题](http://xyproblem.info/)。问一个关于你所遇到的问题的问题,而不是关于你认为的解决方案。作为使用'malloc()'的标准库函数,在任何支持它的平台上都是相同的。 XC16用户手册的第10.3节针对malloc,calloc和ralloc声明:*“如果您不使用这些函数中的任何一个,则 则不需要分配堆。默认情况下,不会创建堆。 *。所以如果你遇到了问题,那就是你应该问的问题。 – Clifford

回答

1

使用malloc等等与任何C实现中的相同。但是,默认情况下,XC16中的链接器不会分配一个堆(从中获取malloc的内存)。你需要告诉链接器分配一个堆在Project Properties|xc16-lc|General|Heap size。堆的大小必须大于您正在创建的最大内存分配以及一些开销(有关详细信息,请参阅XC16文档)。

请记住,很多malloc/ralloc活动可能会碎片堆,而你的堆不是很大。所以,请注意这一点。一个好的策略是像LIFO缓冲区那样使用堆(即总是以相反的顺序释放内存以分配它)。

0

任何人都可以给我一个使用malloc分配内存的示例代码吗?

/* 
    * XC16 v1.31 
    * PIC24FJ128GB606 
    * MPLAB X IDE v3.65 
    * Simulator Debugger 
    */ 

#include <xc.h> 
#include <stdio.h> 
#include <stdlib.h> 

volatile int i=0; 
int main() 
{ 
    volatile int *ptr= malloc(100*sizeof(int)); 
    if (ptr == NULL) 
     printf ("Cannot allocate memory\n"); 
    else 
    { 
     printf ("Memory Allocated successfully \n"); 
     for (i=0; i<(100*sizeof(int)); i++) 
     { 
      *ptr=i; 
      printf ("Pointer value=%d \t i=%d\n",*ptr++,i); 
     } 
    } 
    free ((void *)ptr); 
    return 0; 
} 

另外参阅XC16编译目录,文件, “16 Bit_Language_Tools_Libraries_Manual.pdf” 下截面 “标准C库”。