2017-02-11 227 views
0

任何人都可以給我一個示例代碼使用malloc分配內存? IDE:mplab x ide 編譯器:XC16編譯器 MCU:PIC24F如何在mplab x ide,XC16編譯器中使用malloc分配內存?

在此先感謝。

+3

看起來像[XY問題](http://xyproblem.info/)。問一個關於你所遇到的問題的問題,而不是關於你認爲的解決方案。作爲使用'malloc()'的標準庫函數,在任何支持它的平臺上都是相同的。 XC16用戶手冊的第10.3節針對malloc,calloc和ralloc聲明:*「如果您不使用這些函數中的任何一個,則 則不需要分配堆。默認情況下,不會創建堆。 *。所以如果你遇到了問題,那就是你應該問的問題。 – Clifford

回答

1

使用malloc等等與任何C實現中的相同。但是,默認情況下,XC16中的鏈接器不會分配一個堆(從中獲取malloc的內存)。你需要告訴鏈接器分配一個堆在Project Properties|xc16-lc|General|Heap size。堆的大小必須大於您正在創建的最大內存分配以及一些開銷(有關詳細信息,請參閱XC16文檔)。

請記住,很多malloc/ralloc活動可能會碎片堆,而你的堆不是很大。所以,請注意這一點。一個好的策略是像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; 
} 

另外參閱XC16編譯目錄,文件, 「16 Bit_Language_Tools_Libraries_Manual.pdf」 下截面 「標準C庫」。