• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z OLED 128x64 (Adafruit_SSD1306 & Adafruit_GFX)
#11
Masz piękny przykład buffer overflow w programie... Chociaż przyznam, że szukając tego błędu już sam zaczynałem wierzyć w czarną magię.

Zacznijmy od początku - sam błąd nie ma nic wspólnego z linijką i display.print(). Spróbuj usunąć to wyświetlanie, pewnie powiesz, że wtedy działa. Ale zobacz co będzie jeśli do deklaracji valveState dodasz volatile - błąd znowu się pojawi.

Przyczyna błędu nie ma nic wspólnego z display.print(), może poza tym, że jeśli usuwasz tę linię, to optymalizator usuwa całą zmienną valveState, bo nie jest nigdzie indziej używana i wtedy program działa poprawnie.

Jeśli chcesz zobaczyć, gdzie jest błąd to zmień valveChangeState na:
Kod:
void valveChangeState(int pin, int state){
  if (pin >= 5)
    Serial.println("Kaboom!");

  valveState[pin] = state;
  digitalWrite(pin, state == 1 ? HIGH : LOW);
}

Teraz zobaczysz co się dzieje - parametr pin to nie jest indeks, ale numer pinu i tutaj masz zapis poza zakresem valveState, co akurat wylądowało w wynikach...
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Problem z OLED 128x64 (Adafruit_SSD1306 & Adafruit_GFX) - przez elvis - 07-03-2020, 00:28

Skocz do:


Przeglądający: 1 gości