Как выделить память, используя 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 (т.е. всегда свободная память в обратном порядке, в котором она была выделена).