ошибка компиляции при изменении переменной с char на String

У меня есть код с этими двумя строками:

  char handshakecode = "S"; // Capital S
  char receive;

Строки кода помещаются в отдельный void, а не в setup или loop. Когда я меняю две переменные с char на String, я получаю сообщение об ошибке (полная ошибка внизу) при компиляции в Arduino или проверке кода.

  String handshakecode = "S"; // Capital S
  String receive; 

Когда я вырезаю частичный код только для этого конкретного void, он компилируется нормально, поэтому он должен быть в сочетании с остальным кодом, который я на данный момент не включил в этот пост. .

Это известная ошибка или я что-то не так делаю?

В функции "глобальные конструкторы с ключом 65535_0_WFS_v0.3.ino.cpp.o":

lto1.exe: внутренняя ошибка компилятора: ошибка сегментации

Пожалуйста, отправьте полный отчет об ошибке,

с предварительно обработанным исходным кодом, если это необходимо.

Для получения инструкций см. http://gcc.gnu.org/bugs.html.

lto-wrapper.exe: фатальная ошибка: C:\Program Файлы\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.15.0_x86__mdqgnx93n4wtt\hardware\tools\avr/bin/avr-gcc возвращен 1 статус выхода

компиляция прекращена.

c:/программа файлы/windowsapps/arduinollc.arduinoide_1.8.15.0_x86__mdqgnx93n4wtt/оборудование/инструменты/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/bin/ld .Exe: ошибка: ошибка lto-wrapper

collect2.exe: ошибка: ld вернул 1 статус выхода

статус выхода 1 Ошибка компиляции для платы Arduino/Genuino Mega или Mega 2560.

, 👍0

Обсуждение

это не похоже на ошибку компиляции... это похоже на сбой программы компилятора... попробуйте переустановить Arduino IDE, @jsotola

Это известная ошибка версии IDE для магазина Windows. Удалите его и загрузите с Arduino., @Majenko

@Majenko это происходит и с обычной версией Arduino IDE., @per1234

Интересный. Раньше это была просто версия приложения. Я предполагаю, что они испортили реальную версию. Думаю, еще одна причина перейти на [UECIDE](https://uecide.org) :), @Majenko

Я столкнулся с ошибкой, используя стандартную среду разработки Arduino IDE, когда новый инструментарий все еще находился в стадии бета-тестирования, а также в производственной версии. Обычно я использую самые последние версии всего, но я застрял с платами Arduino AVR 1.6.21, пока это не будет исправлено., @per1234

Я только что сделал обзор всех случаев ошибки, и 22 использовали версию Arduino IDE для Windows, 17 использовали обычную Arduino IDE, 3 не показывали, какую версию они использовали. Во всех случаях ОС была Windows. Так что это хорошее доказательство того, что это совершенно не связано с используемой версией IDE., @per1234


1 ответ


Лучший ответ:

1

Эта ошибка характерна для версии 5.4.0-atmel3.6.1-arduino2 avr-gcc, используемой платами Arduino AVR 1.6.22 и новее. Об этом сообщается здесь:

https://github.com/arduino/Arduino/issues/7949

Вот обходной путь:

  1. Инструменты > Плата > Менеджер плат
  2. Дождитесь окончания загрузки.
  3. При наведении указателя мыши на «Arduino AVR Boards» вы увидите раскрывающееся меню «Выбрать версию». Выберите "1.6.21".
  4. Нажмите "Установить".
  5. Дождитесь завершения установки.
  6. Нажмите "Закрыть".

Из-за ошибки этот обходной путь не работает с Arduino IDE 1.8.6, но будет работать с любой другой версией Arduino IDE.

Если у вас установлен флажок Файл > Настройки > Проверять наличие обновлений при запуске, среда разработки Arduino может время от времени уведомлять вас о доступности новой версии плат Arduino AVR, поэтому вам следует воздержаться от обновления. вернуться к новой версии Arduino AVR Boards, иначе вы снова увидите ошибку сегментации.

,