Подтвердить что ты не робот

Блок try/catch в Arduino

Я работаю с сокетной связью в Arduino, и мне нужен блок try/catch для правильной обработки, что вы предлагаете? Мой поиск в Интернете не увенчался успехом.

изменить:

В коде, с которым я работаю, используется модуль WiFly для взаимодействия с мобильным приложением, я создаю модуль робота с некоторыми элементами управления мобильным приложением с помощью Android. Все работает нормально, но иногда сокет отключается, поэтому мне нужно добавить обработку для таких случаев, что-то похожее на блок try/catch, но я не нашел аналогичный блок для Arduino.

Мой код:

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();
    }
}
4b9b3361

Ответ 1

Ссылка Arduino не содержит список try catch (для получения подробной информации о причинах см., Например, этот связанный ответ). И я предполагаю, что реализация try catch на µ -controller может быть довольно сложной/невозможной.

Задача try в большинстве языков довольно дорогая: стек программы копируется один раз для блока try и для каждого блока catch. В случае, если попытка не удалась, стек блоков try будет сброшен, и будет выполнен один из стеков блоков catch.
Я не специалист по архитектуре процессора, но я могу себе представить, что для этого требуется большой объем памяти и аналогичные операции - это должно быть трудно достичь с помощью простого µ -controller.

Возможно, стоит посмотреть, как программисты C делают шаблоны, похожие на try/catch

Ответ 2

Arduino не поддерживает обработку исключений. Однако вам не нужно использовать обработку исключений, чтобы сделать ваш код надежным. Просто проверяя возвращаемые значения функций, которые могут выйти из строя, вы можете достичь того же конца.

Так как client.connected() проверяется каждый раз вокруг цикла, и поскольку client.available() возвращает 0, если не подключен, единственным возможным сбоем, который еще не обрабатывается, является возврат из client.read().

Вы можете исправить это, например, изменив строку:

char c = client.read();

в

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