2011-11-10 2 views
1

MPLabX IDE를 사용하여 C32 v1.12가 포함 된 PIC32에 대해 다음 코드를 컴파일 중입니다. 코드는 find를 컴파일하지만 malloc()에 매달려 있지만, malloc을 시도 할 때 어떤 크기의 것이 든 항상 문제는 아닙니다.PIC32 c32 1.12, Malloc hangs application

멈춤으로써 디버거가 응답하지 않고 응용 프로그램을 수동으로 다시 시작해야 계속 진행됩니다.

#define SAFE_DELETE(x) { if(x != NULL) { free(x); x=NULL ; } } 

BOOL Test_Malloc() { 

    int *ptr = NULL ; 
    ptr = (int*)malloc(10 * sizeof (int)); // With a cast 
    if(ptr != NULL) { 
     SAFE_DELETE(ptr); 
     return TRUE ; 
    } 
    return FALSE ; 
} 

내 질문은;

  • 어떻게하면 C32 v1.12가 포함 된 PIC32에 메모리를 malloc합니까?
+0

무엇이'SAFE_DELETE'입니까? 100 % 확신 할 수있는 것은'malloc'은 멈추고 그 뒤에있는 코드는 아닌가? 프로젝트의 힙 크기는 어떻게 설정됩니까? 메모리 용량보다 4KB 이상 큰지 확인하십시오. –

+0

@DavidSchwartz 예제 소스 코드에 SAFE_DELETE 정의를 추가했습니다. 예, 나는 코드가 malloc에 ​​있지 않다고 확신합니다. SAFE_DELETE가 아닙니다. 프로젝트 힙 크기를 어떻게 확인합니까? –

답변

2

프로젝트의 힙 크기를 최소한 동적 메모리의 최대 크기보다 4KB 이상 크게 설정해야합니다. malloc이라고하는 함수를 호출 할 때 C 라이브러리에 필요한 것이 무엇인지 추측해야합니다. 꽤 정확한 과학은 아닙니다.

자세한 내용은 Microchips forum thread을 참조하십시오.

+0

기본 힙 크기가 0 인 것 같습니다. 당신은 힙 크기를 설정하는 방법에 대한 자세한 내용은 malloc() –

+0

을 사용하려면 힙 크기를 설정해야합니다. Google "PIC32MX MCU 용 MPLAB C 컴파일러 사용 설명서"섹션 "5.5 HEAP 사용법" –