• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Exception (0) Illegal instruction. Помогите найти ошибку.

IamTeapot

New member
Доброго времени суток.
Проблема такова:
Использовал в работе две NodeMCU V3. (CH340). Одна (клиент) считывала данные с тачскрина, формировала пакет с двумя координатами и передавала на вторую. Вторая (точка доступа) это дело принимала и отправляла координаты на COM-порт. Всё это прекрасно работало на протяжении двух суток. Затем вторая перестала создавать AP и без остановок матерится в порт. Использовался этот скетч:
Код:
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

// Set AP credentials
#define AP_SSID "ESP_AP1"
#define AP_PASS "thereisnospoon"

// UDP
WiFiUDP UDP;
IPAddress local_IP(192,168,4,1);
IPAddress gateway(192,168,4,1);
IPAddress subnet(255,255,255,0);
#define UDP_PORT 4210

// UDP Buffer
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];

void setup() {

  // Setup serial port
  Serial.begin(115200);
  Serial.println();

  // Begin Access Point
  Serial.println("Starting access point...");
  WiFi.softAPConfig(local_IP, gateway, subnet);
  WiFi.softAP(AP_SSID, AP_PASS);
  Serial.println(WiFi.localIP());

  // Begin listening to UDP port
  UDP.begin(UDP_PORT);
  Serial.print("Listening on UDP port ");
  Serial.println(UDP_PORT);

}

void loop() {

  // Receive packet
  int packetSize = UDP.parsePacket();
  if (packetSize)
  {
    Serial.print("Received packet of size ");
    Serial.print(packetSize);
   
    UDP.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
    Serial.println("Contents:");
    Serial.println(packetBuffer);
    for( int i = 0; i < 11;  ++i )
      packetBuffer[i] = (char)0;
  }
}
в монитор порта идет что-то такое:
exception.png
Exception decoder на это дело говорит
38f29-clip-49kb.png
В чем может быть проблема?
Никакие пины ни к чему подключены не были ни во время прошивки ни во время работы, только USB интерфейс платы.
После этого плату пробовал прошивать старыми рабочими скриптами - результат приблизительно такой же.
Пробовал так же очистить флеш с помощью esptool.py - безрезультатно.
Решил использовать новую плату, но боюсь, как бы ее не настигла та же участь.
Заранее благодарен любой оказанной помощи.
 

enjoynering

Well-known member
у вас UDP_TX_PACKET_MAX_SIZE не оределен.

вместо велосипеда for-loop для отчистки буфера, используйте стандарную функцию:

Код:
memset(packetBuffer, 0x00, UDP_TX_PACKET_MAX_SIZE)
ну и чтоб каждый цикл не чистить введите проверку:
Код:
if (packetSize > 0)
{
//чистим буфер тут
}
 

enjoynering

Well-known member
у вас UDP_TX_PACKET_MAX_SIZE не оределен.
да действително (так глубоко исходники я не копал). тогда проблема может быть в том что вы недостаточно выделяете пямяти для C - Strings. Подробнее тут.
окончение строки там - дополнитльный знак "/0". поэтому ваш буфер надо объявлять так:

char packetBuffer[UDP_TX_PACKET_MAX_SIZE + 1];
а вобще все есть в примерах .../libraries/ESP8266WiFi/examples/Udp/Udp.ino
 
Сверху Снизу