如何在mplab x ide,XC16编译器中使用malloc分配内存?

时间:2017-02-11 09:33:30

标签: embedded pic mplab xc16

有人能给我一个使用malloc分配内存的示例代码吗? IDE:mplab x ide 编译器:XC16编译器 MCU:PIC24F

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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;
}

另请参阅&#34;标准C库&#34;在XC16编译器目录下,docs&#34; 16-Bit_Language_Tools_Libraries_Manual.pdf&#34;。