Ошибка при компиляции скетча для 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)
@TheGamerCoder, 👍1
Обсуждение1 ответ
Лучший ответ:
Это ошибка компилятора (компоновщика), используемого ядром Arduino AVR. Это не из-за ошибки в вашем коде, и вы мало что можете с этим поделать, кроме как использовать другую версию AVR Core.
См. это сообщение на форуме:
Вот традиционный обходной путь:
- Инструменты > Плата > Менеджер плат
- Дождитесь окончания загрузки.
- При наведении указателя мыши на «Arduino AVR Boards» вы увидите раскрывающееся меню «Выбрать версию». Выберите "1.6.21".
- Нажмите "Установить".
- Дождитесь завершения установки.
- Нажмите "Закрыть".
- Существуют ли какие-либо модули Wi-Fi для Arduino или Uno, которые можно подключить к внешней антенне Wi-Fi?
- Esp8266 + Atmega328p в качестве прошивки
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- Как разрешить междоменные запросы на ESP8266 WebServer
- Как установить связь между веб-камерой и Arduino UNO и получать прямую трансляцию на мобильном телефоне с помощью ESP8266?
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Управление реле 5В с помощью Wemos D1 R1
Вы забыли включить сообщение об ошибке. Пожалуйста, правильно отформатируйте код (используйте автоформат в IDE, удалите ненужные пустые строки и исправьте отступы)., @tttapa
Каков точный текст ошибки (все ошибки, а не только последняя строка). Кроме того, какую версию IDE вы используете, какую версию пакета плат AVR и как вы установили IDE?, @Majenko
Я думал, что это может быть версия "Windows Store". Известно, что сломан. Удали это. Загрузите правильно IDE с веб-сайта Arduino., @Majenko
@Majenko Я этого не знал, какая разница по сравнению с «обычной» версией?, @tttapa
Он связывает сломанную версию компилятора., @Majenko
@Majenko Я думал, что компилятор был частью ядра AVR, а не самой IDE., @tttapa
Они отдельные, но в комплекте. Когда вы загружаете IDE, она также содержит ядро AVR и компилятор AVR-GCC., @Majenko