Ошибка при компиляции скетча для Arduino Uno (ld return 1)

У меня есть telnet-сервер с esp8266 + SoftwareSerial+ UNO, и здесь я хочу включить светодиод с помощью команды ON . будет 1 или 2. Это для получения 1 или 2 пронумерованных контактов. И я извлекаю пин из запроса с функциями indexOf и substring и пишу:

pinMode(pin,OUTPUT);
digitalWrite(pin,HIGH);

Я пишу, если контакт не 0 или 1 и находится в диапазоне 2-9 для типа 1 и если контакт находится в диапазоне 10-13. Но во время компиляции выдает ошибку компиляции для uno. И это дает мне эту ошибку, когда я использую pinMode. Когда я пишу это для установки, это не дает мне ошибки. Почему? Что происходит?

Полный код:

#include "WiFiEsp.h"

// Эмулируем Serial1 на контактах 6/7, если они отсутствуют
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial Serial1(6, 7); // прием, передача
#endif
 String res = "";
char ssid[] = "ssid";            // SSID вашей сети (имя)
char pass[] = "passs";         // ваш сетевой пароль
int status = WL_IDLE_STATUS;     // статус радио Wi-Fi
int reqCount = 0;                // количество полученных запросов

WiFiEspServer server(23);

 WiFiEspClient client;


void setup() {
  pinMode(2,OUTPUT);

  Serial.begin(115200);
  // инициализируем серийный номер для модуля ESP
  Serial1.begin(9600);
  // инициализируем модуль ESP
  WiFi.init(&Serial1);

  // проверяем наличие щита
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // не продолжать
    while (true);
  }


  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Подключиться к сети WPA/WPA2
    status = WiFi.begin(ssid, pass);
  }

  Serial.println("You're connected to the network");
Serial.println(WiFi.localIP());



WiFi.config(IPAddress(192,168,0,165));

  // запускаем веб-сервер на порту 80
  server.begin();
}





void loop(){
  if(!client){
    client = server.available();
    if(client){
      client.println("Welcome to telnet server!, 192.168.0.165:23");
      client.flush();
    }





  }


  if(client){
if(client.available()>0){
  res = "";
  while(client.available()>0){

char c = client.read();

res += c;



  }
  Serial.println(res);

int i = res.indexOf("ON")+3;
int j = i+1;
String hh = res.substring(i,j);
int type = hh.toInt();
Serial.println(hh);
if(type == 1) 
{
  int ii = res.indexOf("ON")+5;
int jj = ii+1;
String hhh = res.substring(ii,jj);
Serial.println(hhh);
int ihhh = hhh.toInt();
if(ihhh != 0 && ihhh != 1 && (2 <=ihhh)&& ( ihhh <= 9 ))
{
  pinMode(ihhh,OUTPUT);
  digitalWrite(ihhh,HIGH);
}
else{
  client.print("Pin is TX/RX, or not 2<= pin <=9\r\n");
  client.flush();
}
}else if(type == 2){
    int iii = res.indexOf("ON")+5;
int jjj = iii+2;
String hhhh = res.substring(iii,jjj);
Serial.println(hhhh);
int ihhhh = hhhh.toInt();
if(ihhhh != 0 && ihhhh != 1 && !((2<=ihhhh)&&(ihhhh <= 9)) && (10 <= ihhhh)&&(ihhhh <= 13 ))
{
  pinMode(ihhhh,OUTPUT);
  digitalWrite(ihhhh,HIGH);
}
else{
  client.print("Pin is TX/RX, or not 2<= pin <=9\r\n");
  client.flush();
}
}



}

    if(!client.connected())
    Serial.println("Client disconnected from Telnet Server");

  }

}

Ошибка:

Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), плата: "Arduino/Genuino Uno"

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp: в функции-члене 'availableForWrite':

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp:203:1: внутренняя ошибка компилятора: ошибка сегментации

^

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

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

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

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

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

c:/program files/windowsapps/arduinollc.arduinoide_1.8.21.0_x86__mdqgnx93n4wtt/hardware/tools/avr/bin/../lib/gcc/avr/5.4.0/../../../. ./avr/bin/ld.exe: ошибка: ошибка lto-wrapper

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

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

Версия Arduino IDE: 1.8.9 (Windows Store 1.8.21.0)

, 👍1

Обсуждение

Вы забыли включить сообщение об ошибке. Пожалуйста, правильно отформатируйте код (используйте автоформат в IDE, удалите ненужные пустые строки и исправьте отступы)., @tttapa

Каков точный текст ошибки (все ошибки, а не только последняя строка). Кроме того, какую версию IDE вы используете, какую версию пакета плат AVR и как вы установили IDE?, @Majenko

Я думал, что это может быть версия "Windows Store". Известно, что сломан. Удали это. Загрузите правильно IDE с веб-сайта Arduino., @Majenko

@Majenko Я этого не знал, какая разница по сравнению с «обычной» версией?, @tttapa

Он связывает сломанную версию компилятора., @Majenko

@Majenko Я думал, что компилятор был частью ядра AVR, а не самой IDE., @tttapa

Они отдельные, но в комплекте. Когда вы загружаете IDE, она также содержит ядро AVR и компилятор AVR-GCC., @Majenko


1 ответ


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

2

Это ошибка компилятора (компоновщика), используемого ядром Arduino AVR. Это не из-за ошибки в вашем коде, и вы мало что можете с этим поделать, кроме как использовать другую версию AVR Core.

См. это сообщение на форуме:

Вот традиционный обходной путь:

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