【问题标题】:How to allocate memory using malloc in mplab x ide, XC16 compiler?如何在 mplab x ide、XC16 编译器中使用 malloc 分配内存?
【发布时间】:2017-02-11 09:33:30
【问题描述】:

谁能给我一个使用 malloc 分配内存的示例代码? IDE:mplab x ide 编译器:XC16 编译器 单片机:PIC24F

提前致谢。

【问题讨论】:

  • 看起来像XY problem。问一个关于你遇到的问题的问题,而不是问你认为解决方案是什么。作为使用malloc() 的标准库函数,在任何支持它的平台上都是相同的。 XC16 用户手册第 10.3 节关于 malloc、calloc 和 ralloc 的状态:“如果不使用这些函数中的任何一个,则不需要分配堆。默认情况下,不会创建堆。 ".因此,如果您遇到问题,可能就是这样,这就是您应该问的问题。

标签: embedded pic mplab xc16


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    谁能给我一个使用 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 编译器目录下的“标准 C 库”部分,文档,“16-Bit_Language_Tools_Libraries_Manual.pdf”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多