2017-01-06 1 views
-1

Je tente d'exécuter Dhrystone afin de référencer un PIC32.Exécution de Dhrystone dans C, malloc() types conflictuels

Le code source que je l'utilise vieux, et en particulier il y a une question qui empêche de la construction:

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 

La déclaration de malloc (de *) génère le message du compilateur: erreur: types contradictoires pour 'malloc'. Quand je commente cette ligne, je peux exécuter le programme mais je pense qu'il y a une erreur d'exécution à Ptr_Glob-> Ptr_Comp = Next_Ptr_Glob; ... J'ai utilisé des LED pour déboguer les erreurs d'exécution et ils fonctionneront jusqu'à ce point. Des idées sur les raisons pour lesquelles je rencontre ces problèmes? Comment puis-je résoudre le problème avec malloc()?

+0

Re malloc - remplacer cette ligne par "#include ". Mais puisque le code (http://homepages.cwi.nl/~steven/dry.c?) Est vieux et joue toutes sortes de trucs stupides, deux questions: d'abord, est-ce qu'il fonctionne sur votre ordinateur? (il devrait), et deuxièmement, vous * l'exécutez via "sh dry.c", n'est-ce pas? – loreb

+0

Le PIC32 n'est pas si vieux pour justifier un tel code! Sans parler du fait que l'utilisation de 'malloc' sur un tel microcontrôleur est un signal d'une conception imparfaite, déjà vieille de quelques centaines d'années lorsque le PIC32 a démarré, ce qui nécessitait des prototypes appropriés. On dirait plutôt que le programmeur a fait un mauvais travail. – Olaf

Répondre

0

malloc semble avoir été déclaré incorrect. La déclaration appropriée est extern void * malloc(size_t);

Une solution encore mieux serait d'ajouter #include <stdlib.h>;

+0

Vous ne devez pas déclarer les fonctions de la bibliothèque dans le code de l'application. – Olaf

+0

Il n'y a aucun problème pour déclarer une API bien définie. Cependant, c'est une mauvaise pratique, c'est pourquoi j'ai suggéré d'inclure le fichier d'en-tête approprié – levengli

+0

Donc j'ai eu #include ; déjà dans mon code, c'est pourquoi il pourrait fonctionner après que je l'ai commenté. Néanmoins, ce code source est très ancien et semble être monté avec des problèmes. Malheureusement, je ne sais pas où je pourrais trouver facile de mettre en œuvre le code source dhrystone ... ce qui est étrange parce que chaque fabricant parle toujours de dmips. On dirait qu'il devrait être facile d'accéder au code quelque part. – Ozzyozbone