Как выделить память, используя malloc в mplab x ide, компиляторе XC16?

Может кто-нибудь дать мне пример кода для выделения памяти с помощью malloc? IDE: mplab x ide Компилятор: компилятор XC16 MCU: PIC24F

Заранее спасибо.

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;
}

Также см. Раздел "Стандартные библиотеки C" в каталоге компилятора XC16, документы "16-Bit_Language_Tools_Libraries_Manual.pdf".

С помощью malloc и т. д. такой же как и в любом C реализация. Однако по умолчанию компоновщик в XC16 не выделяет кучу (из которой берется память для malloc). Вам нужно будет указать компоновщику выделить кучу в Project Properties|xc16-lc|General|Heap size, Размер кучи должен быть больше, чем самые большие выделения памяти, которые вы делаете, плюс некоторые накладные расходы (подробности см. В документации XC16).

Имейте в виду, что много malloc/ralloc активность может фрагментировать кучу, а ваша куча невелика. Так что помни об этом. Хорошей стратегией является использование кучи как буфера LIFO (т.е. всегда свободная память в обратном порядке, в котором она была выделена).

Другие вопросы по тегам