Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Probléme de fonction avec argument ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2411
Âge : 41
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » lun. 22 janv. 2018 16:42

Bonjour à tous,

Bon difficile de trouver un titre , pour mon problème .

Je suis en train d'essayer de paramétrer un module(GSM2-click) avec des commandes "AT". Pour l'initialisation je dois tout d'abord effectivement le réglage du baud-rate en envoyant la commande "AT" au module. Quand celui me répond "OK", c'est que le baud-rate est bon.

Ensuite dans le même principe, j'envoie des commandes au module pour le paramétrer . il doit aussi me répondre "OK" pour valider le paramétrage.

Après plusieurs test, tout est bon. Je me dis alors que je peux "optimiser" mon code et le rendre plus propre. J'ai donc décider de créer une fonction pour envoyer une commande au module et je reviens quand j'ai reçu "OK" .

voici un code qui fonctionne :

Code : Tout sélectionner

//------------------------------------------------------------------------------
// Test du baud rate
  while(1) {
     UART_Write_Text("AT");
     UART_Write(0x0D);      // On termine par un CR
     delay_ms(100);
    
     if 
(ReponseID == GSM_OK){               // Si "OK" au test baud rate le programme peut continuer
        ReponseID = 0;
        break;                              // On sort de la bocule de test baud rate
      }
   }


Dans ce code je rentre dans une boucle sans fin. j’envoie le mot "AT" au module, j’attends 100ms le temps de recevoir la réponse en UART. Si mon drapeau GSM_OK pendant ces 100ms, c'est que le module à répondu "OK", je peux sortir de ma boucle.
Sinon je re-envoi le mot"AT" ...Etc .... jusqu' a que je reçoive "OK".

Voici une autre partie du code qui fonctionne :
dans mon initialisation j'ai l'appel d'une fonction :

Code : Tout sélectionner

  envoi_commande_Parametre("ATE0");


Cette fonction, envoi la commande "ATE0" au module est attends la réponse " OK" . Exactement comme pour le "AT"

Vocii la fonction en question :

Code : Tout sélectionner

//------------------------------------------------------------------------
// Param. d'entrée : La commande à envoyer
void envoi_commande_Parametre(char *s1){
  while(1) {
   
      while
(*s1) {
         UART_Write(*s1++);
       }
      UART_Write(0x0D);   // On termine par un CR
      
      Delay_ms
(100);
      
      if 
(ReponseID == GSM_OK){
          ReponseID = 0;
          break;
       }
   }
}


ca fonctionne bien.

Comme il s'agit de la même fonction pour envoyer "ATE0" et "AT" , je me dis que si je fais :

Code : Tout sélectionner

  envoi_commande_Parametre("AT")

Ca devrati faire la même chose .

Et ben non , le programme me renvoie que des "cr".

Je ne comprends pas pourquoi, il n'arrive pas a m'envoyer une série de "AT" pour faire le baud-rate avec ma fonction.
J'ai comme l'impression que le "AT" est envoyé une seul fois et qu’après plus rien n'est envoyé ! a part le "CR"
Du coup quelle est la durée de validité de l'argument envoyé ?
LE pointeur doit-il est remis au début ?

PS: j'ai un cable TTL-UART pour espionner le dialogue sur hyperterminal
RE-PS: Voici le programme en entier :
► Afficher le programme
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Probléme de fonction avec argument ?
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1684
Âge : 69
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » lun. 22 janv. 2018 18:11

bonsoir Jeremy


je pense que c'est du au type de donnees
Dans un cas c'est un pointeur de char
Dans l'autre c'est une valeur en dur, dans le code ..

essaie avec un cast de forcer le type de pointeur
envoi_commande_Parametre((char *)"AT");

ou modifie la fonction :
void envoi_commande_Parametre(const char *s1)
Aides toi, le ciel ou Fantastpic t'aideras

Probléme de fonction avec argument ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2411
Âge : 41
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » lun. 22 janv. 2018 19:32

Bonsoir Paul,

Ou ije pense que c'est un problème dans ce genre.

Du coup je pense que cela va me résoudre d'autre bug incompréhensible. Car les commandes envoyées de cette façon ne passe qu'une fois la première ! donc si il y a un loupé au premier coup, le deuxième envoi ne sert à rien et ca bug. Cela explique pourquoi sans raison apparente l'initialisation ne passait pas parfois !

Du coup en voulant optimiser et rendre plus lisible, j'ai compliqué et bugger mon code! . Surtout quand on touche aux pointeurs et en plus en les passant entre fonction; :mur: :mur: :mur: Je cherche le bâton pour me faire battre...... Maudit pointeur....

Demain j'essayerai ta solution, sinon je vais faire au plus simple mais plus long lol
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Probléme de fonction avec argument ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2411
Âge : 41
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » lun. 22 janv. 2018 20:40

En fait dans m’exempte de mikroe sur le GSM2 click, il utilise deux commandes différentes et donc évite ce genre de tracas.

Comme je ne suis pas plus malin que mikroE , je vais faire pareil .....

Une boucle infinie avec dedans , une commande pour envoyer le texte, et une autre pour attendre la réponse;
Je ne me sens pas faire une fonction avec passage de chaine de caractères sans terminateur à la fin.
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités