web-dev-qa-db-fra.com

bloc try / catch dans Arduino

Je travaille avec la communication par socket dans Arduino et j'ai besoin du bloc try/catch pour une manipulation correcte, que suggérez-vous les gars? Ma recherche sur Internet n'a pas abouti.

éditer:

Le code avec lequel je travaille utilise le module WiFly pour interagir avec une application mobile, je construis un module robot avec quelques contrôles sur une application mobile utilisant Android. Tout fonctionne très bien, mais parfois la prise est déconnectée, je dois donc ajouter une gestion pour de tels cas, quelque chose de similaire au bloc try/catch, mais je n'ai pas trouvé de bloc similaire pour Arduino.

Mon code:

void loop() {
    Client client = server.available();
    if (client) {
        while (client.connected()) {
            if (client.available()) {
                // Serial.print("client connected \n");
                char c = client.read();

                if(c == 'L')
                    turnLeft();
                if(c == 'R')
                    turnRight();
                if(c == 'F')
                    goForward();
                if(c == 'B')
                    goBackward();
                if(c == 'S')
                    Stop();

                Serial.print(c);
            }
        }

        // give the web browser time to receive the data
        delay(100);
        client.stop();
    }
}
15
NZal

Le la référence Arduino est ne listant pas try catch (pour plus de détails sur les raisons, voir, par exemple, this réponse associée ). Et je suppose que la mise en œuvre de try catch sur un µ-controller pourrait être difficile/impossible.

Try catch dans la plupart des langages est une opération assez coûteuse: la pile de programmes est copiée une fois pour le bloc try et pour chaque bloc catch. Dans le cas où l'essai se passe mal, la pile try-block sera rejetée et l'une des piles catch block sera exécutée.
Je ne suis pas un expert en architecture CPU, mais je peux imaginer que cela nécessite beaucoup de permutation de mémoire et des opérations similaires - cela devrait être difficile à réaliser avec un simple µ-contrôleur.

Cela pourrait valoir la peine de regarder comment Les programmeurs C font des modèles similaires à try/catch

21
vikingosegundo

Arduino ne prend pas en charge la gestion des exceptions . Cependant, vous n'avez pas besoin d'utiliser la gestion des exceptions pour rendre votre code robuste. En vérifiant simplement les valeurs de retour des fonctions qui peuvent échouer, vous pouvez atteindre le même but.

Puisque client.connected() est vérifié à chaque fois autour de la boucle, et puisque client.available() retournera 0 s'il n'est pas connecté, le seul échec possible qui n'est pas déjà traité est le retour de client.read().

Vous pouvez résoudre ce problème, par exemple, en modifiant la ligne:

char c = client.read();

à:

int i = client.read();
if (i == -1) {
    break;
}
char c = (char) i;
11
Matthew Murdoch