2017-02-11 2 views
0

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

Спасибо заранее.

+3

Похож на проблему [XY] (http://xyproblem.info/). Задайте вопрос о проблеме, которую вы имеете, а не о том, что вы думаете * решение. Поскольку стандартная функция библиотеки, использующая 'malloc()', идентична на любой платформе, которая ее поддерживает. Раздел 10.3 руководства пользователя XC16 указывает на malloc, calloc и ralloc: * «Если вы не используете ни одну из этих функций, , вам не нужно выделять кучу. По умолчанию куча не создается». *. Поэтому, если у вас возникла проблема, возможно, это так, и об этом вы должны были спросить. – Clifford

ответ

1

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

Имейте в виду, что много действий может фрагментировать кучу, а ваша куча невелика. Поэтому помните об этом. Хорошей стратегией является использование кучи как 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; 
} 

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

Смежные вопросы