• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
 
Сверху Снизу