[C] Transfert de paramètres
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 47

[C] Transfert de paramètres



  1. #1
    invite3c35244f

    [C] Transfert de paramètres


    ------

    Bonjour,

    voila je suis entrain de faire un petit programme, et je me trouve devant un petit problême, après compilation, j'ai cette erreur:
    undefined behavior:the order of volatile accesses is undifined in the statement
    voila mon morceau de programme:
    Code:
    /***********Déclaration des sous programmes*****/
    void conv_AD(void);
    void calcul (void);
    
    /********** Déclaration des variables ************/
    float Vbatt=0.00, Van1;
    int resultV;
    
    /**********************/
    void conv_AD(void)
    {
    ADCON0=0x05;				// Sélection AN1/ADON = 1.
    ADCON2=0xA5;				// Justification à droite/Tps d'acquisition=4Tad/Horloge de conversion=16Tosc
    GO_DONE=1;		// Start Conversion A/N
    while(GO_DONE);	// attend EOC
    GO_DONE=0;		// Fin Conversion A/N
    }
    
    /********************/
    void calcul (void)
    {
    resultV=((ADRESH*256)+ADRESL);	//Récupération du résultat sur 10 Bits
    Van1 = ((float)resultV) * q;	//Calcul de la tension présente sur AN1 (Float)
    Vbatt=(float)(Van1*6.8921);			// Calcul de la tension
    }
    Il s'agit que des sous programmes, et l'erreur se situe au niveau de:
    Code:
    resultV=((ADRESH*256)+ADRESL);
    Je suppose que l'erreur vient que les fonctions sont déclaré en void...(void), comment dois je les déclarer en fonction du type de paramètre a transférer?
    Je vous remercie

    -----

  2. #2
    invite7b66e893

    Re : [C] Transfert de paramètres

    A premiere vue ta cible est un PIC, ,si tu code avec C18 (pic18) pourquoi ne pas utiliser les fonctions de la librairie "adc.h"???


    Sinon au niveau du code:
    ADRESL et ADRESH sont normalement déclarés en "char", il faut donc que tu les "cast" (transtype):
    resultV=(((int)(ADRESH))<<8)+A DRESL;

  3. #3
    invite5637435c

    Re : [C] Transfert de paramètres

    Salut,
    Il faut retourner Vbat:

    Code:
    float calcul (void)
    {
    resultV=((ADRESH*256)+ADRESL);	//Récupération du résultat sur 10 Bits
    Van1 = ((float)resultV) * q;	//Calcul de la tension présente sur AN1 (Float)
    Vbatt=(float)(Van1*6.8921);			// Calcul de la tension
    return(Vbatt);
    }

  4. #4
    invite7b66e893

    Re : [C] Transfert de paramètres

    Citation Envoyé par HULK28 Voir le message
    Salut,
    Il faut retourner Vbat:

    Code:
    float calcul (void)
    {
    resultV=((ADRESH*256)+ADRESL);	//Récupération du résultat sur 10 Bits
    Van1 = ((float)resultV) * q;	//Calcul de la tension présente sur AN1 (Float)
    Vbatt=(float)(Van1*6.8921);			// Calcul de la tension
    return(Vbatt);
    }

    Pas nécessairement, puisqu'il est déclaré en global, mais en effet, ce serait plus propre de supprimer toutes ces globales et d'utiliser paramètres + return

  5. A voir en vidéo sur Futura
  6. #5
    invite3c35244f

    Re : [C] Transfert de paramètres

    Je vous remercie,

    et si je supprime les variables globales, je les ajoutes dans le sous programme donc :
    Code:
    float calcul (void)
    {
    float Vbatt=0.00, Van1;
    int resultV;
    resultV=((ADRESH*256)+ADRESL);	//Récupération du résultat sur 10 Bits
    Van1 = ((float)resultV) * q;	//Calcul de la tension présente sur AN1 (Float)
    Vbatt=(float)(Van1*6.8921);			// Calcul de la tension
    return(Vbatt);
    }
    j'espère que je me plante pas???
    Merci encore

  7. #6
    invite7b66e893

    Re : [C] Transfert de paramètres

    Citation Envoyé par jorg1n Voir le message
    Je vous remercie,

    et si je supprime les variables globales, je les ajoutes dans le sous programme donc :
    Code:
    float calcul (void)
    {
    float Vbatt=0.00, Van1;
    int resultV;
    resultV=((ADRESH*256)+ADRESL);	//Récupération du résultat sur 10 Bits
    Van1 = ((float)resultV) * q;	//Calcul de la tension présente sur AN1 (Float)
    Vbatt=(float)(Van1*6.8921);			// Calcul de la tension
    return(Vbatt);
    }
    j'espère que je me plante pas???
    Merci encore

    float calcul (void)
    {
    float Van1;
    int resultV;

    resultV=(((int)ADRESH*256)+ADR ESL); //Récupération du résultat sur 10 Bits => ne pas oublier de caster ADRESH en int
    Van1 = ((float)resultV) * q; //Calcul de la tension présente sur AN1 (Float)
    return = Van1*6.8921; // Calcul de la tension => transtypage non nécessaire puisque Van1 est deja un float

    }[/CODE]

  8. #7
    invite3c35244f

    Re : [C] Transfert de paramètres

    Merci...
    mais j'ai encore une question, dans:
    Code:
    resultV=(((int)ADRESH*256)+ADRESL);
    on a pas besoin de caster ADRESL??
    Et je ne comprend pas trop la fin:
    Code:
    return = Van1*6.8921;
    merci encore...

  9. #8
    invite3c35244f

    Re : [C] Transfert de paramètres

    Et si je veux réutiliser la variable qui est transmise par return(...) dans un autre sous programme, comment je fait?
    merci encore

  10. #9
    invite7b66e893

    Re : [C] Transfert de paramètres

    Citation Envoyé par jorg1n Voir le message
    Et si je veux réutiliser la variable qui est transmise par return(...) dans un autre sous programme, comment je fait?
    merci encore

    Oula, va falloir reviser tes notions de C...

    Les variables déclarées DANS un sous programme, ne sont accessibles que DANS le sous programme en question.

    Le return te permet de sortir une "donnée" de ton sous programme, c'est donc dans le code qui fait appele a ton sous programme que tu déclares une variable du type de retour de ton sous programme afin de la sauvegarder et/ou de la réutiliser dans ton calcul.

    Ex:

    void main()
    {
    float resultat;

    resultat = calcul();
    }

    }

  11. #10
    invite3c35244f

    Re : [C] Transfert de paramètres

    J'ai un autre petit soucis...
    pour mieux organiser mon projet je voudrais créer plusieurs fichier .c comme par exemple: main.c, mesure.c , affichage.c, tout en sachant que certaine variable seront utilisées dans deux .c parfois (par exemple, mesure et affichage.c) mais je ne sais pas comment faire pour organisé tout ça, j'ai essayé de mettre dans le main.c:
    Code:
    #include "mesure.c"
    et dans le main réutiliser la valeur de la mesure, mais ça fonctionne pas...
    je suppose que je dois créer un .h qui permettera de faire la liaison avec tout les fichiers...mais auriez vous la procédure...car je ne sais pas trop comment faire.
    Je vous remercie d'avance

  12. #11
    invite7b66e893

    Re : [C] Transfert de paramètres

    Alors pour organiser un projet en plusieurs fichiers:

    tu as un main.c ==> routine principale

    Pour chaque autre fichier *.c que tu crées tu dois créer un *.h portant le meme nom (exemple calcul.c ET calcul.h)

    Le calcul.c contiendra les routines:

    int routine1(void)
    {
    //code
    }

    void routine2(int param1, char* plettre)
    {
    // code
    }

    Etc...


    Le .h contiendra quand a lui:
    les prototypes de tes fonctions:

    int routine1(void);

    void routine2(int, char*);

    Mais aussi les équivalences, definitions de structures, etc...

    Si tu as besoin par exemple d'une fonction du fichier calcul.c dans ton main.c alors tu fais un #include "calcul.h" en début de fichier .c


    Tu ferais bien de lire des bouquins sur le C ou revoir tes cours parceque la ca a l'air d etre tres flou pour toi

  13. #12
    invite3c35244f

    Re : [C] Transfert de paramètres

    Bonjour,
    Je te remercie pour ta réponse très claire...
    Mais je pense que je vais bouquiné un peu mes cours le soir...j'en ai besoin je crois.
    Encore merci
    Bonne Journée

  14. #13
    invite3c35244f

    Re : [C] Transfert de paramètres

    Et si une variable est utilisée dans un sous programme qui se dans un fichier mesure.c et que l'on veut l'utiliser dans un fichier affiche.c, comment dois la déclarer, comment la déclarer dans le .h.
    Merci d'avance

  15. #14
    invite3c35244f

    Re : [C] Transfert de paramètres

    Bonjour,
    je n'en fini plus ... alors voila j'ai fait un petit fichier word, qui explique ce que je souhaite faire...si vous pouviez jetez un oeil dessuset me dire comment je doit déclarer mes fonctions dans les .c et ce que je dois déclarer dans le .h .
    Je vous remercie d'avance
    Images attachées Images attachées

  16. #15
    invite3c35244f

    Re : [C] Transfert de paramètres

    Erreur de ma par dans le pdf...dans le fichier affich.c, ce n'est pas:

    Code:
    gputs(tbat1f);
    mais

    Code:
    gputs(tbat1a);
    la variable qui provient du fichier mesure .c
    Personne ne peut me donner un petit coup de pouce...
    merci d'avance

  17. #16
    Seb.26

    Re : [C] Transfert de paramètres

    Citation Envoyé par jorg1n Voir le message
    si vous pouviez jetez un oeil dessuset me dire comment je doit déclarer mes fonctions dans les .c et ce que je dois déclarer dans le .h .
    Simple :
    .c = ton programme, les variables, tout quoi
    .h = ce que les autres morceaux de ton programme ont besoin

    Maintenant, si tu te pose ce genre de questions, c'est qu'effectivement il faudrait peut être commencer par faire un peu de C ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  18. #17
    invite3c35244f

    Re : [C] Transfert de paramètres

    Maintenant, si tu te pose ce genre de questions, c'est qu'effectivement il faudrait peut être commencer par faire un peu de C ...
    ....

    Je te remercie...mais en fait, c'est comment déclarer les fonctions qui appel des variables, comment déclarer les variables dans le .h,...si tu pouvais me montrer un exemple concret (par rapport à mon pdf par exemple ...) ça serait vraiment sympa..car je m'emmêle un peu les pinceaux...
    merci d'avance

  19. #18
    Seb.26

    Re : [C] Transfert de paramètres

    Je t'avais déjà fait un exemple de .h et .c dans ton post "[programmation C]-Afficheur 128x64 - Librairie GLCD" ...

    Maintenant, si c'est pas 100% acquis pour toi, le mieux c'est de potasser des cours
    ie. http://c.developpez.com/cours/#tutoriels-c
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  20. #19
    Seb.26

    Re : [C] Transfert de paramètres

    PS: dans ton .pdf, tu semble baser tout ton programme sur des variables globales, c'est une très mauvaise idée ... utilise plutôt des fonctions qui renvoient des valeurs ... c'est plus propre, moins spaghettis et ça consomme moins de RAM ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  21. #20
    invite3c35244f

    Re : [C] Transfert de paramètres

    Bonjour,

    je te remercie du conseil...je vais remettre ça en ordre.
    Mais dans mon pdf, j'ai mis que des fonctions déclaré en void car je ne vois pas trop comment faire pour envoyer les paramètres d'une fonction à une autre et d'un fichier à un autre...
    Bonne journée

  22. #21
    invite3c35244f

    Re : [C] Transfert de paramètres

    Voila, un fichier .c avec son .h pouvez vous me dire si le transfert de paramètres est bien réalisé entre les fonctions...
    Je vous remercie d'avance
    le .h:
    Code:
    #ifndef __MESURECALCULBAT1_H
    
    /*********************** DEFINE ****************************/
    #define q 4.88e-3	// quantum pour un CAN 10bits 0v-5v
    
    
    /**********  Déclaration des sous-programmes ********/
    
    /******************* Battery 1 ****************/
    char TensionBatt1 (void);
    char TempBatt1 (void);
    le .c
    Code:
    #include <io18f4525.h>    /* IAR compiler processor defs */
    #include <stdio.h>        /* IAR compiler I/O operations defs */
    #include <gdisp.h>        /* GLCD Library defs */
    #include <mesurecalculbat1.h> /* Mesure/calcul defs */
    
    
    /********** Déclaration des variables ************/
    char tbat1a[30], vbat1a[30];
    
    
    /******************** Définitions des sous-programmes *************************/
    //Mesure Tension
    int conv_AN_vbatt1 (void);
    float calcul_vbatt1 (resultV);
    char conv_ftoa_vbatt1 (vbat1f);
    
    //Mesure Température
    int conv_AN_tbatt1 (void);
    float calcul_tbatt1(resultT);
    char conv_ftoa_tbatt1 (tbat1f);
    
    
    /********************************************************************
    ************************* BATTERY 1 ********************************
    *******************************************************************/
    
    /*********************** TENSION **********************************/
    char TensionBatt1 (void)
    {
      conv_AN_vbatt1 ();
      calcul_vbatt1 (resultV);
      conv_ftoa_vbatt1 (vbat1f);
      return vbat1a;
    }
    
    /*********************** TEMPERATURE **********************************/
    char TempBatt1 (void)
    {
      conv_AN_tbatt1 ();
      calcul_tbatt1 (resultT);
      conv_ftoa_tbatt1 (tbat1f);
      return tbat1a;
    }
    
    
    
    /***************************************************************
    Nom   : conv_AN_vbatt1
    Role  : Réalisation d'une conversion Analogique/numérique sur AN1
    ****************************************************************/
    int conv_AN_vbatt1 (void)
    {
    int resultV;
    ADCON0=0x05;	  // Sélection AN1/ADON = 1.
    ADCON2=0xA5;	  // Justification à droite/Tps d'acquisition=4Tad/Horloge de conversion=16Tosc
    GO_DONE=1;	  // Start Conversion A/N
    while(GO_DONE);	  // attend EOC
    GO_DONE=0;	  // Fin Conversion A/N
    resultV=((ADRESH*256)+ADRESL);	//Récupération du résultat sur 10 Bits
    return resultV;
    }
    
    /***************************************************************************
    Nom   :calcul_vbatt1 
    Role  : Calcul de la tension suite à la convAN->résultat en réel
    *****************************************************************************/
    float calcul_vbatt1 (resultV)
    {
    float van1, vbat1f=0.00;
    van1 = ((float)resultV) * q;	//Calcul de la tension présente sur AN1 (Float)
    vbat1f =(float)(van1 * 6.8576);	// Calcul de la tension
    return vbat1f;
    }
    
    /***************************************************************************
    Nom   : conv_ftoa_vbatt1
    Role  : conversion du résultat: float to string
    *****************************************************************************/
    char conv_ftoa_vbatt1 (vbat1f)
    {
    sprintf (vbat1a,"%6.2f",vbat1f);
    }

  23. #22
    Seb.26

    Re : [C] Transfert de paramètres

    Citation Envoyé par jorg1n Voir le message
    Voila, un fichier .c avec son .h pouvez vous me dire si le transfert de paramètres est bien réalisé entre les fonctions...
    C'est quoi que tu appelle "transfert de paramètres" ???

    Si ton code était tout pourri, il ne compilerait pas ... comme tu ne dis pas que ça compile pas, c'est que ça doit compiler ... donc c'est que c'est OK ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  24. #23
    invite3c35244f

    Re : [C] Transfert de paramètres

    C'est quoi que tu appelle "transfert de paramètres" ???
    ce que j'appelle "paramètres", c'est les variables , ce que je souhaite donc c'est d'envoyer une variable d'un sous programme à un autre sous programme, qu'il soit placé dans le même fichier.c ou un autre .c
    Voili voila...
    et mon programme ne compile pas...
    merci pour ton aide

  25. #24
    Seb.26

    Re : [C] Transfert de paramètres

    Citation Envoyé par jorg1n Voir le message
    ce que j'appelle "paramètres", c'est les variables , ce que je souhaite donc c'est d'envoyer une variable d'un sous programme à un autre sous programme, qu'il soit placé dans le même fichier.c ou un autre .c
    Voili voila...
    et mon programme ne compile pas...
    merci pour ton aide
    Alors effectivement, un paramètre est une variable (locale)....
    Quand tu parle de sous programme, j'imagine que tu parle de fonctions...

    Donc, je te redis : retourne voir la première réponse que je t'avais faite pour un de tes vieux posts, il y a un exemple complet dedans ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  26. #25
    invite3c35244f

    Re : [C] Transfert de paramètres

    C'est bon, j'ai retrouvé le sujet , et ton exemple...je potasse tt ça et je vous tiens au courant...
    Merci Seb26 (excuse moi d'avoir été inscistant, mais j'ai confondu l'exemple de marmotte qui est dans ce sujet et ton exemple qui était dans un autre sujet... désolé)
    Merci encore

  27. #26
    Seb.26

    Re : [C] Transfert de paramètres

    Citation Envoyé par jorg1n Voir le message
    C'est bon, j'ai retrouvé le sujet , et ton exemple...je potasse tt ça et je vous tiens au courant...
    Merci Seb26 (excuse moi d'avoir été inscistant, mais j'ai confondu l'exemple de marmotte qui est dans ce sujet et ton exemple qui était dans un autre sujet... désolé)
    Merci encore
    T'inquiète ...

    Si tu veux : repost ce que j'avais mis, et on regardera ensemble si c'est un peu flou, mais lis tout ça en détail avant ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  28. #27
    invite5637435c

    Re : [C] Transfert de paramètres

    Attention quand même à plusieurs choses, un programme peut très bien se compiler sans erreur sans pour autant être correct ou fonctionnel.
    Le compilateur tant que la syntaxe est respectée exécutera son travail, un peu à la manière d'un traitement de texte qui va déclarer correct une phrase même si elle n'a aucun sens...

    Je n'ai pas encore regardé ton code Jorg1n, mais as-tu fais un peu le point de ton coté sur ce que sont les variables (locales, globales, statiques, externes), ainsi que de l'usage des pointeurs passés en arguments à des fonctions ou même des passages de fonctions en arguments?

    Toute la subtilité du C passe par ces notions pour obtenir des codes compacts et facilement modifiables.
    @+

  29. #28
    invite3c35244f

    Re : [C] Transfert de paramètres

    Bonjour,

    tout d'abord, voila l'exemple que tu m'avais donné dans un sujet précédent:
    http://forums.futura-sciences.com/thread208334-2.html

    Ensuite j'ai regarder ton exemple et appliqué à mon projet, et ça donne ça:
    mesure.c
    Code:
    //Déclaration des variables
    int resultV;
    float vbat1f;
    char vbat1a;
    
    //Déclaration des fonctions
    int conv_AN_vbat1 (void);
    float calcul_vbat1 (void);
    char conv_ftoa_vbat1 (void);
    
    //Définition des fonctions
    char mesure_bat1 (void)
     {
      conv_AN_vbat1 ();
      calcul_vbat1 (); 
      conv_ftoa_vbat1 ();
      return (vbat1a);
     }
    
    int conv_AN_vbat1 (void)
     {
    ADCON0=0x05;
    ADCON2=0xA5;
    GO_DONE=1;
    while(GO_DONE);
    GO_DONE=0;
    resultV=((ADRESH*256)+ADRESL);
    return (resultV);
     }
    
    float calcul_vbat1 (void)
    {
    float van1 ;
    van1 = ((float)resultV) * q;	//Calcul de la tension présente sur AN1 (Float)
    vbat1f =(float)(van1 * 6.8576);	// Calcul de la tension
    return (vbat1f);
    }
    
    char conv_ftoa_vbat1 (void);
    {
    sprintf (vbat1a,"%6.2f",vbat1f);
    return (vbat1a);
    }
    le mesure.h correspondant:
    Code:
    extern char vbat1a;
    char mesure_bat1 (void);
    et dans mon main.c
    Code:
    #include "mesure.h"
    void main (void)
    {
    ...
    mesure_bat1();
    gputs(vbat1a);
    ...
    }
    Et si je veux réutiliser la variable vbat1a dans un autre fichier: affich.c, je mais au début de celui ci: #include "mesure.h"?

    Tout ça te semble correct? J'ai en tout cas adapté ton exemple (complet) à mon projet, ça devrait le faire...je met tout ça dans mon programme et je te tiens au courant.
    Mille Merci Seb26 de ta patience...

  30. #29
    invite3c35244f

    Re : [C] Transfert de paramètres

    Je viens d'essayer tout ça, et j'ai un petit souci, à ce niveau là:
    Code:
    sprintf (vbat1a,"%6.2f",vbat1f);
    il me dit:
    Error[Pe167]: argument of type "char" is incompatible with parameter of type "char *" C:\... 113
    et dans la librairie de mon compilateur, la fonction est définit comme ceci:
    int sprintf(char *s, const char *format, …)
    Mais ce que je ne comprend pas , c'est que lorsque je fais tout (conversion AN,...)dans le meme fichier.c tout fonctionne correctement, et il accepte ma variable de type char, et ma carte fonctionne.
    Avez vous une idée...
    merci d'avance

  31. #30
    Seb.26

    Re : [C] Transfert de paramètres

    Alors ...

    ... à quoi servent les variables resultV, vbat1f ?

    Sauf erreur de ma part ...à rien... à part à bouffer une dizaine d'octets sur ton uCPU ...

    Reprenons le code que tu as posté :

    Code:
    //Déclaration des variables
    //int resultV; // pourquoi 'int' ???!
    //float vbat1f;
    char vbat1a; // BUG !!!
    
    //Déclaration des fonctions = prototypes
    unsigned short conv_AN_vbat1 (void); // pourquoi int ?
    float calcul_vbat1 (void);
    char conv_ftoa_vbat1 (void);
    
    //Définition des fonctions
    char mesure_bat1 (void) // BUG !!!
     {
      conv_AN_vbat1 ();
      calcul_vbat1 (); 
      conv_ftoa_vbat1 ();
      return (vbat1a); 
     }
    
    //int conv_AN_vbat1 (void)
    unsigned short conv_AN_vbat1(void)
     {
    ADCON0=0x05;
    ADCON2=0xA5;
    GO_DONE=1;
    while(GO_DONE); // Deadlock !
    GO_DONE=0;
    return (((ADRESH*256)+ADRESL));
     }
    
    float calcul_vbat1 (unsigned short value)
    {
    float van1 ;
    van1 = ((float)value) * q;	//Calcul de la tension présente sur AN1 (Float)
    //vbat1f =(float)(van1 * 6.8576);	// Calcul de la tension
    return ((float)(van1 * 6.8576));
    }
    
    char conv_ftoa_vbat1 (void); // BUG !!!
    {
    sprintf (vbat1a,"%6.2f",vbat1f); // BUG !!!
    return (vbat1a);
    }
    Le tout un peu en vrac, mais ça te donnera des pistes pour creuser un peu ...

    [Edit] on s'est croisé ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Demande De Parametres
    Par invited1f6e1ef dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 1
    Dernier message: 28/12/2007, 19h43
  2. parametres radio
    Par invited39a3825 dans le forum Électronique
    Réponses: 3
    Dernier message: 26/04/2007, 09h17
  3. Barycentre et paramètres
    Par invitede6f3928 dans le forum Mathématiques du supérieur
    Réponses: 10
    Dernier message: 11/12/2005, 20h53
  4. courbes paramétrés
    Par inviteabe6c916 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 21/01/2005, 16h58
  5. paramètres cinétiques
    Par invite0b7e2607 dans le forum Biologie
    Réponses: 2
    Dernier message: 20/12/2004, 13h39
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...