2017-01-06 4 views
-1

PIC32를 벤치마킹하기 위해 Dhrystone을 실행하려고합니다.C에서 dhrystone 실행, malloc() 충돌 유형

내가 오래 사용, 특히 건물에서 그것을 방해하는 하나의 문제가 있어요 소스 코드 : 오류 :

extern char  *malloc(); 
.... 
.... 



Next_Ptr_Glob = (Rec_Pointer) 

    malloc (sizeof (Rec_Type)); 
    Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); 


    Ptr_Glob->Ptr_Comp     = Next_Ptr_Glob; 

    Ptr_Glob->Discr      = Ident_1; 
    Ptr_Glob->variant.var_1.Enum_Comp  = Ident_3; 
    Ptr_Glob->variant.var_1.Int_Comp  = 40; 
    strcpy (Ptr_Glob->variant.var_1.Str_Comp, 
      "DHRYSTONE PROGRAM, SOME STRING"); 
    strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING"); 

//rest of program 

*의 malloc에 ​​(의 선언은) 컴파일러 메시지를 생성 충돌 유형 'malloc'을 위해. 그 라인을 주석 처리 할 때 프로그램을 실행할 수는 있지만 Ptr_Glob-> Ptr_Comp = Next_Ptr_Glob에 런타임 오류가 있다고 생각합니다. ... 나는 런타임 오류를 디버그하기 위해 LED를 사용하고 있으며, 그 시점까지 작동 할 것이다. 왜 내가이 문제를 겪고 있는지에 대한 아이디어가 있습니까? 어떻게하면 malloc()으로 문제를 해결할 수 있습니까?

+0

다시의 malloc에 ​​추가하는 것입니다. 그러나 코드 (http://homepages.cwi.nl/~steven/dry.c?)는 오래되어 모든 종류의 어리석은 트릭을 실행합니다. 두 가지 질문이 있습니다. 첫째, 컴퓨터에서 실행됩니까? 둘째로, 당신은 * "sh dry.c"를 통해 그것을 실행하고 있습니다, 당신은 그렇지 않습니까? – loreb

+0

PIC32는 그런 코드를 정당화하기에는 오래되지 않았습니다! 그런 MCU에서'malloc '을 사용하는 것은 PIC32가 시작될 때 적절한 프로토 타입을 필요로했던 몇 년 전의 결함있는 디자인, C99 방식의 신호입니다. 프로그래머가 나쁜 일을 한 것처럼 보입니다. – Olaf

답변

0

malloc이 잘못된 것으로 보입니다. "#INCLUDE "로 그 라인을 교체 - 적절한 선언은 extern void * malloc(size_t);

더 좋은 솔루션을 #include <stdlib.h>;

+0

응용 프로그램 코드에서 라이브러리 함수를 선언하면 안됩니다. – Olaf

+0

잘 정의 된 API를 선언해도 아무런 문제가 없습니다. 그러나 그것은 내가 적절한 헤더 파일 – levengli

+0

을 포함하도록 제안한 것은 나쁜 습관이므로 #include ; 이미 내 코드에서, 내가 그것을 주석 처리 한 후 작동 할 수있는 이유입니다. 그럼에도 불구하고이 소스 코드는 매우 오래되었고 문제가있는 것으로 보입니다. 불행히도 dhrystone 소스 코드를 쉽게 구현할 수있는 곳을 알지 못합니다 ... 모든 제조업체가 항상 dmips에 대해 이야기하기 때문에 이상합니다. 어딘가에서 코드에 쉽게 액세스 할 수 있어야하는 것처럼 보입니다. – Ozzyozbone