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

Plateformes Discussion :

Boucle qui ne s'arrête pas


Sujet :

Plateformes

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2022
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2022
    Messages : 28
    Par défaut Boucle qui ne s'arrête pas
    Bonjour,

    J'ai une boucle While qui fonctionne cependant je veux exécuter plusieurs commandes.
    Le script finit par bloquer à une commande et ne lance pas celle d'après. En plus, une fois les commandes lancées, je ne trouve pas la condition qui pourrait faire que la boucle s'arrête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            char b[] = "ZynqMP";
            while (serial.waitForReadyRead() && rest != 0)
            {
                QByteArray data = serial.readAll();;
                rest = strcmp(data, b);
                qDebug() << data.toStdString().c_str();
                serial.write("123\n");
                QByteArray readLine;
                serial.write("setenv ipaddr 192.168.0.222\n");
                serial.write("setenv serverip 192.168.0.36\n");
                serial.write("saveenv\n"); 
                serial.write("tftpboot 0x10000000 boot.scr\n");
             }
    Merci à tous ceux qui prendront le temps de m'aider.

  2. #2
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 676
    Par défaut
    Salut,

    Essaye en changeant l'ordre d'évaluation de ta condition while:
    while (rest != 0 && serial...

  3. #3
    Membre averti
    Femme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2022
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2022
    Messages : 28
    Par défaut
    Merci de ta réponse.
    Ça n'a malheureusement pas changé le problème.

    En plus les commandes "saveenv" et "tftpboot" continue de fonctionner. Mais si "saveenv" est lancé, "tftpboot" ne démarrera jamais. Un peu comme si elles effaçaient tout ce qui était écrit après elles.

    J'ai tenté avec une variable indépendante mais soit ça n'arrête pas le programme soit ça ne le lance même pas. Comme si une variable supplémentaire était prioritaire sur les commandes de "serial.write" peu importe l'ordre d'écriture.

  4. #4
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 676
    Par défaut
    Je n'utilise pas Qt mais essaye en remplaçant la ligne 5 par rest= qstrcmp(data.data(), b);

  5. #5
    Membre averti
    Femme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2022
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2022
    Messages : 28
    Par défaut
    Ça n'a rien changé.

    C'est pas grave. Merce d'avoir essayé de m'aider.

  6. #6
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 676
    Par défaut
    Fournis un code un peu plus étoffé, ce qu'il est supposé lire et faire sur le port série.
    Sinon, les fonctions membres suivantes devraient t'aider:
    https://doc.qt.io/qt-6/qiodevice.html#canReadLine
    https://doc.qt.io/qt-6/qiodevice.html#readLine

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 532
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 532
    Par défaut
    Citation Envoyé par Yazuka2.0 Voir le message
    J'ai une boucle While qui fonctionne ce pendant je veux exécuter plusieurs commandes.
    dans le code donné il n'y a aucune instruction qui permette de vérifier si les commandes sur le port série se déroulent bien.
    Le code donné est insuffisant il faut tester une valeur de retour pour savoir si les instructions marchent bien.
    Par exemple QSerialPort::setBaudRate retourne un booléen donc vérifier à chaque fois si les commandes s'exécutent bien.
    Une fois que vous avez fait cela c'est un problème de synchronisation en apparence.

  8. #8
    Membre averti
    Femme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2022
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2022
    Messages : 28
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    dans le code donné il n'y a aucune instruction qui permette de vérifier si les commandes sur le port série se déroulent bien.
    Le code donné est insuffisant il faut tester une valeur de retour pour savoir si les instructions marchent bien.
    Par exemple QSerialPort::setBaudRate retourne un booléen donc vérifier à chaque fois si les commandes s'exécutent bien.
    Une fois que vous avez fait cela c'est un problème de synchronisation en apparence.
    Je n'ai pas tout compris. Quand je lance le programme les commandes ont l'air de bien fonctionner puisque dans le terminal je vois les commandes se lancer.

    Comment fonctionne QSerial::setBaudRate exactement ?

  9. #9
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 676
    Par défaut
    Dans quel objectif ont été écrites les lignes 18 à 31 ?
    Qu'est supposé faire ce bout de code ou plutôt qu'en en attends-tu ?

  10. #10
    Membre averti
    Femme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2022
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2022
    Messages : 28
    Par défaut
    Citation Envoyé par kaitlyn Voir le message
    Dans quel objectif ont été écrites les lignes 18 à 31 ?
    Qu'est supposé faire ce bout de code ou plutôt qu'en en attends-tu ?
    Je lance le programme, il va lire ce qu'envoi la carte et écrire le mot de passe pour être connecté en série.
    Ensuite il écrit les commandes qui permettent de configurer la carte.

    Normalement il y a plusieurs "if" en fonction du nombre de commande à fournir mais pour l'instant je n'ai mis que le début.

  11. #11
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 676
    Par défaut
    Concentre-toi d’abord sur la lecture avant de chercher à écrire sur le port série. Je vais regarder pour te trouver un début de piste.

Discussions similaires

  1. Boucle Loop While qui ne s'arrête pas avec mes conditions
    Par ourquiqui dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/06/2019, 22h12
  2. [XL-2010] Boucle For each qui ne s'arrête pas
    Par Gllou06 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/02/2017, 11h10
  3. Boucle for qui ne s'arrête pas
    Par Cha_rline dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/11/2015, 13h23
  4. [FLASH MX2004] Clip qui ne s'arrête pas
    Par romain starck dans le forum ActionScript 1 & ActionScript 2
    Réponses: 8
    Dernier message: 10/05/2006, 19h43
  5. [VBA-E]une boucle qui ne s'arrète pas
    Par vivelesgnous dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/02/2006, 18h05

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