Ошибка компиляции библиотеки Ethernet

Я просто пытаюсь подключить свой Adruino к Интернету, и мой конфигурационный код подключения к Ethernet завершается с ошибкой, когда я пытаюсь его проверить, и я не уверен, какова точная причина.

Я использую экран Ethernet и установил библиотеку Ethernet v.2.0.0.

Это запущенный код:

WANStatus initialiseWAN() {
  // Введите MAC-адрес для вашего контроллера ниже.
  // Более новые экраны Ethernet имеют MAC-адрес, напечатанный на наклейке на экране
  byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  WANStatus res;

  Serial.println("[INFO]: Initialising WAN");
  // Попробуйте инициализировать подключение Ethernet

  if (Ethernet.begin(mac) == 0) {
    res.error = true;
    res.retry = true;
    
    if (Ethernet.hardwareStatus() == EthernetNoHardware) {
      res.message = "Ethernet shield was not found";
      Serial.print("[ERROR]: "); Serial.println(res.message);    
      return res;
    }

    // Если присутствуют все компоненты, попробуйте назначить статический IP-адрес
    IPAddress ip(192, 168, 0, 177);
    IPAddress myDns(192, 168, 0, 1);
    Ethernet.begin(mac, ip, myDns)
    Serial.print("[INFO]: Assigned static IP: "); Serial.println(Ethernet.localIP());
    
    if (Ethernet.linkStatus() == LinkOFF) {
      res.message = "Ethernet cable is not connected";
      Serial.print("[ERROR]: "); Serial.println(res.message);
      return res;
    }
    if (Ethernet.linkStatus() == Unknown) {
      res.message = "Ethernet link status is 'Unknown' check the cable";
      Serial.print("[ERROR]: "); Serial.println(res.message);
      return res;
    }

// Назначен статический IP-адрес
    res.error = false;
    res.retry = false;
    res.message = "Static IP Address";
    return res;
  } else {
// Полученный IP-адрес от DHCP
    Serial.print("[INFO]: Received DHCP IP: "); Serial.println(Ethernet.localIP());
    res.error = false;
    res.retry = false;
    res.message = "DHCP IP Address";    
    return res;
  }

// Задача: проверьте модули Wi-Fi здесь
}

И, сообщение об ошибке:

[Starting] Verifying sketch 'controller\controller.ino'
[Warning] Output path is not specified. Unable to reuse previously compiled files. Build will be slower. See README.
Loading configuration...
Initialising packages...
Preparing boards...
Verifying...
In file included from C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Dns.cpp:8:0:
C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Dns.cpp: In member function 'uint16_t DNSClient::BuildRequest(const char*)':
C:\Program Files (x86)\Arduino\libraries\Ethernet\src\utility/w5100.h:457:25: warning: result of '(256 << 8)' requires 18 bits to represent, but 'int' only has 16 bits [-Wshift-overflow=]
#define htons(x) ( (((x)<<8)&0xFF00) | (((x)>>8)&0xFF) )
                      ~~~^~~
C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Dns.cpp:164:18: note: in expansion of macro 'htons'
twoByteBuffer = htons(QUERY_FLAG | OPCODE_STANDARD_QUERY | RECURSION_DESIRED_FLAG);
^~~~~
Sketch uses 22574 bytes (69%) of program storage space. Maximum is 32256 bytes.
Global variables use 1467 bytes (71%) of dynamic memory, leaving 581 bytes for local variables. Maximum is 2048 bytes.
IntelliSense configuration already up to date. To manually rebuild your IntelliSense configuration run "Ctrl+Alt+I"
[Done] Verifying sketch 'controller\controller.ino'

, 👍3


1 ответ


0

Все в порядке. Ошибки компилятора нет, и ваш скетч готов к загрузке.

Предупреждение компилятора "результат '(256 << 8)' требует представления 18 бит, но 'int' имеет только 16 бит" из исходного кода библиотеки Ethernet - вам не о чем беспокоиться.

,

предупреждение исправлено в Ethernet 2.0.1, выпущенном 6 июля 2022 г., @Juraj