Je galère un peu ( pour ne pas dire beaucoup) à fiabiliser à 100% mon programme. Peut être est ce a cause de l'UART qu(il m'arrive parfois d'avoir des bugs inexplicables ( ou incompréhensibles pour moi).
Je cherche donc une manière de ne jamais rendre mon programme bloquant ( pas de boucle infinie). cela implique que sur chaque envoi ou attente de réponse je dois comptabiliser les boucles et si blocage soit en sortir soit carrément reseter le module.
Pour ce faire je souhaiterais créer une fonction avec du texte en paramètre d'entrée. mais je me mélange les pinceaux avec ces pointeurs.
Comme j'ai plusieurs fois le même style de dialogue une fonction me parait approprié. Partons sur un exemple simple : l'effacement des messages.
Je dois envoyer une commande à mon module GSM: AT+QMGDA="DEL ALL" suivis d'un CR
Celui une fois fait doit me répondre avec un Ok
Pour le moment j'en suis la :
Code : Tout sélectionner
//----- On efface le message (tous les messages)
i = 0;
do {
i++;
UART1_Write_Text("AT+QMGDA=\"DEL ALL\"\n");
delay_ms(100);
if (i>10) break;
} while(Ok == 0); Je RAZ mon index
- J’exécute la boucle au moins une fois
- J’incrémente mon index pour compter le nombre de boucle
- J'envoie mon message
- j'attends 100ms afin de recevoir une réponse (le drapeau Ok se léve)
- Je regarde le nombre de boucle, si supérieur a 10 je sors a quand même ( ou je reset).
- Si je n'ai pas reçu de Ok je réessaye.
Je souhaiterais faire une fonction appelée Envoi_Commande(ma commande) par exemple, avec le texte en paramètres .
La notion de pointeur reste vraiment difficile encore pour moi !
j'ai essayé ceci sans sucés
Création d'un tableau pour enregistre le texte :
Code : Tout sélectionner
char Commande[50]; Code : Tout sélectionner
Envoi_Commande("AT+QMGDA=\"DEL ALL\"\n");Code : Tout sélectionner
// ----------------- Envoi d'un commande -----------------------------
// Elle permet d'envoyer une commande et de s'assurer de celle ci
void Envoi_commande(*Commande){
i = Ok = 0;
do {
i++;
UART1_Write_Text(Commande);
delay_ms(100);
if (i>10) break;
} while(Ok == 0);
}