IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

erreur de compilation


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut erreur de compilation
    Bonjour,
    Je travaille sur un petit projet de C embarqué. Je souhaite communiquer avec une SD par l'intermédiaire d'un pic18.
    J'ai un problème de compilation. Voici le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Clean: Done.
    Executing: "C:\MCC18\bin\mcc18.exe" -p=18F46K20 /i"C:\MCC18\h" "FSIO.c" -fo="FSIO.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
    Executing: "C:\MCC18\bin\mcc18.exe" -p=18F46K20 /i"C:\MCC18\h" "main.c" -fo="main.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
    Executing: "C:\MCC18\bin\mcc18.exe" -p=18F46K20 /i"C:\MCC18\h" "SD-SPI.c" -fo="SD-SPI.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
    Executing: "C:\MCC18\bin\mplink.exe" /l"C:\MCC18\lib" /k"C:\MCC18\lkr" "18f46k20.lkr" "FSIO.o" "main.o" "SD-SPI.o" /u_CRUNTIME /u_DEBUG /o"sd.cof" /M"sd.map" /W
    MPLINK 4.30.01, Linker
     
    Copyright (c) 2009 Microchip Technology Inc.
    Error - could not find definition of symbol 'main' in file 'C:\MCC18\lib/c018i.o'.
    Errors    : 1
     
    Link step failed
    Je débute dans le C et j'ai quelques difficultés (c'est le moins qu'on puisse dire), j'ai besoin d'un petit coup de main, merci pour votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Je ne sais pas comment se code les softs pour les µc, mais vu l'erreur le compilo semble ne pas trouver la fonction "main".

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Tu as peut-être fait une erreur sur le prototype de main : souvent, ce genre de cible ne tolère pas les arguments, et tu dois déclarer main comme "void main ( void )" pour qu'il le reconnaisse.
    Voir la doc du compilateur à ce sujet, c'est en général écrit très explicitement.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    J'ai déclaré mon main de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void main ( void )
    {
    ...
    }
    et j'ai consulté la doc du compilateur qui confirme cette déclaration.
    Donc je ne pense pas que l'erreur vienne de là.
    Une autre suggestion ??

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    normalement c'est


    puisqu'on retourne un statut..

    (et normalemet, si c'est la lib C statndard, c'est même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main ( int argc, char** argv)
    )


    mais avoir l'exemple de ton code serait pas mal..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Je viens d'essayer les deux versions et j'ai toujours le même message d'erreur.
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
     
    //#include "A_define_hard.h"
    #include "A_actions.h"
    #include "A_test.h"
    #include "D_afficheur_segment.h"
    #include "D_bouton.h"
    #include "D_UART.h"
    #include "D_bouton_re.h"
    #include "D_afficheur_segment_re.h"
    #include "FSIO.h"
    #include "p18f46k20.h"
     
    //registre de configuration du micro PIC18F46K20
     
    #pragma config FOSC = INTIO67		//Internal oscillator block, port function on RA6 and RA7
    #pragma config PWRT = ON
    #pragma config MCLRE = ON
    #pragma config FCMEN = OFF
    #pragma config IESO = OFF
    #pragma config BOREN = SBORDIS
    #pragma config BORV = 30
    #pragma config WDTEN = ON		//autorisation du WDT
    #pragma config WDTPS = 256		//1/31khz * 128 * 256 = 1s
    #pragma config PBADEN = OFF
    #pragma config STVREN = ON
    #pragma config DEBUG = OFF
    #pragma config LVP = OFF
    #pragma config HFOFST = OFF
    #pragma config LPT1OSC = OFF
    #pragma config XINST = OFF
     
     
     
    #pragma romdata mydata_scn=0xf00100	
    #pragma romdata
     
     
     
    /* Déclaration des variables utilisables ************************************************************************************/
     
    unsigned char UCH_flag_it_10ms;
    unsigned char UCH_cpt_10ms;
     
    /* Déclaration de fonctions utilisatbles ************************************************************************************/
     
    void F_init_hard(void);
     
    /********************Programme Principal ************************************************************************************/
     
    int main ( int argc, char* argv)
    {
     
    //void F_lecture_num_bouton(void);
     
    	F_init_hard();
     
    	//init variable de gestion des tâches
    	UCH_flag_it_10ms = 0;
    	UCH_cpt_10ms = 0;
     
    	//F_init_appli();
     
     
    	while(1)
    	{
    		ClrWdt();
     
    		if(UCH_flag_it_10ms)
    		{
     
    			UCH_flag_it_10ms--;
    			//F_action_10ms();		//tâche 10ms
    			if(++UCH_cpt_10ms>10)
    			{
    				UCH_cpt_10ms-=10;
    			//	F_action_100ms();	//tâche 100ms
     
     
     
     
     
    			}
    		}
    		//F_action_de_fond();			//tâche de fond
    	}
    }
     
     
     
    /* Implémentation des fonctions ************************************************************************************/
     
    /**************************************************************************************************************************
    *   fonction    :  F_init_hard
    *------------------------------------------------------------------------------------------------------------------------
    *   description :       Cette fonction permet d'initialiser les interfaces matériels du micro.
    *
    *   entrée      :      aucun
    *   sortie      :   aucun
    ****************************************************************************************************************************/
     
    void F_init_hard(void)
    {
    	//paramétrage OSC interne 16MHz avec PLL * 4 ==> 64 MHz.
    	OSCCONbits.IRCF0 = 1;
    	OSCCONbits.IRCF1 = 1;
    	OSCCONbits.IRCF2 = 1;
    	OSCTUNEbits.PLLEN = 1;
    	OSCTUNEbits.INTSRC = 0;
     
    	//port I/O DIGITAL
    	ANSEL = 0;
    	ANSELH = 0;
     
    	//INIT PORT BOUTON
    	TRISAbits.TRISA5 = 1;	//B_TST en entrée
    	TRISAbits.TRISA6 = 1;	//B_VOL en entrée
    	TRISAbits.TRISA7 = 1;	//B_MEL en entrée
     
    	//INIT PORT AFFICHEUR
    	TRISAbits.TRISA0 = 0;	//SEGCLK en sortie
    	TRISAbits.TRISA1 = 0;	//SEGDAT en sortie
    	TRISCbits.TRISC2 = 0;	//OSEG en sortie
     
    	//INIT TIMER1 10ms
    	INIT_TIMER1_500NS;
    	INIT_TIMER1;
     
     
    	//AUTORISE IT TIMER1
    	PIR1bits.TMR1IF = 0;
    	PIE1bits.TMR1IE = 1;
     
    	//AUTORISE IT GENERAL
    	ENABLE_IT_PE;
    	ENABLE_IT;
     
    	//INIT PORT SD**********by guigueek
    	TRISCbits.TRISC0 = 0;	//CHIP SELECT SD en sortie
    	TRISCbits.TRISC3 = 0;	//Clock SD en sortie
    	TRISCbits.TRISC4 = 1;	//Sortie SD en entrée
    	TRISCbits.TRISC5 = 0;	//Entrée SD en sortie
     
    }

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    euh..

    • d'une part j'avais fait une coquille (ce que je vais corriger de ce pas) c'est char ** argv (certaines touches de mon clavier sont difficiles)

    • d'autre part je ne vois nulle part de "include stdlib.h"..

    • Enfin, si c'est un int, il faut que main retourne un int..



    mais j'aurais tendance à pencher pour l'oubli de stdlib..

    D'autre part, es-tu certain de tes options de compilation ?
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Cela peut-être un problème de préprocesseur (beaucoup ont eu le même souci d'après google) et en effet :

    Citation Envoyé par http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB-C18-v3_31-README.html
    (C18-128 / 24038)
    No error is given when #if does not have corresponding #endif and the condition is true
    le main est peut-être masqué par le préprocesseur, un #endif manquant dans un header ?
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  9. #9
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    normalement c'estpuisqu'on retourne un statut..
    Les "normalement" doivent souvent être revus et corrigés lorsque l'on travaille sur cibles embarquées... Le respect de la norme est en général, et au mieux, approximatif.

    Citation Envoyé par guilermo Voir le message
    Je viens d'essayer les deux versions et j'ai toujours le même message d'erreur.
    Essaie de mettre "main" en dernière fonction du fichier, sait-on jamais...
    Sinon, il n'y a pas un exemple de programme / projet dans le SDK du µC ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Résolu
    C'est bon ça compile!!!
    C'était bien un #endif qui manquait dans un header.
    Merci à tous pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo