переобозначить Serial в setup
- Войдите на сайт для отправки комментариев
Пт, 31/07/2020 - 16:17
Доброго времени суток!
Есть конструкция
HardwareSerial & RS485 = Serial1; HardwareSerial & RS485back = Serial3;
но, она жесткая, а мне нужно в setup иметь возможно переобозначить ее примерно вот так
pinMode(RS_CHANGE_PIN, INPUT_PULLUP); if (byte(digitalRead(RS_CHANGE_PIN)) == 0) { RS485 = Serial1; RS485back = Serial3; DIR = 2; DIRback = 3; DebugPrintln("RS-485 forward"); } else { RS485 = Serial3; RS485back = Serial1; DIR = 3; DIRback = 2; DebugPrintln("RS-485 backward"); }
Программа компилируется, но сериалы не работают(((
Подскажите, как сделать правильно, и можно ли вообще так делать?
в глобальном пространстве
в setup()
только после этого по всей программе придется менять вызовы с точкой RS485.read() на вызовы по стрелке RS485->read()
Ссылку перепределять нельзя, ты копируешь объекты. Используй указатель или std::ref.
в глобальном пространстве
в setup()
только после этого по всей программе придется менять вызовы с точкой RS485.read() на вызовы по стрелке RS485->read()
не компилится
А можно подробнее, я думал, что & - это и есть указатель
Максимально подробно- в любом учебнике С++
Судя по всему то, что я хочу сделать не получится. Так как HardwareSerial - это класс, то указатель на его экземпляр должен выглядеть вот так
и переопределить его тоже нельзя
вот только что попробовал
- компилится, ошибок нет
gonzales - что за плата у вас? - под разные линейки МК разные ядра
Код выше без проблем компилится для Меги и для СТМ32
вот только что попробовал
- компилиться, ошибок нет
Круто, я тоже так хочу!
А можно в моем контроллере так настраивать входной канал? У меня там 485 (serial1) и mapple USB (serial)...
Вот бы можно было на ходу менять порты входящих данных...
Teensy 3.5
gonzales - что за плата у вас? - под разные линейки МК разные ядра
Код выше без проблем компилится для Меги и для СТМ32
Teensy 3.5
А можно в моем контроллере так настраивать входной канал? У меня там 485 (serial1) и mapple USB (serial)...
легко :)
как видите, под СТМ это компилится. И могу уверенно сказать, что не только компилится, но и работает - у меня есть проект, где я передаю в процедуру указатель на хардовый Сериал
Teensy 3.5
под Тенси проверить не могу, этих плат у меня в ИДЕ нет. Но вообще код выше - это абсолютно стандартный метод получения указателя на экземпляр класса, странно что он не работает. Проверьте еще раз, нет ли опечаток
вот только что попробовал
- компилится, ошибок нет
Да, нашел ошибку, все работает!!! b707 - респект и уважуха!!!
Ссылку перепределять нельзя, ты копируешь объекты. Используй указатель или std::ref.
В Ардуино IDE?
Да, нашел ошибку
Звёздочку пропустил? Там же прямо об этом компилятор говорил :-)
Да, нашел ошибку
Звёздочку пропустил? Там же прямо об этом компилятор говорил :-)
Нет, остались сопли выше в сетапе HardwareSerial *RS485 = &Serial1; Соответственно произошло задвоение локального и глобального указателей.
Нет, остались сопли выше в сетапе HardwareSerial *RS485 = &Serial1; Соответственно произошло задвоение локального и глобального указателей.
Компилятор другое говорил. Значит было и то, и другое.
легко :)
как видите, под СТМ это компилится. И могу уверенно сказать, что не только компилится, но и работает - у меня есть проект, где я передаю в процедуру указатель на хардовый Сериал
А можно пример как это у вас оформлено? Очень интересно научится :-)