- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 35

Thema: std::thread für ESP32 unter Arduino IDE zum Laufen zu kriegen...?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    hast du dazu einen aktualisierten code ?
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  2. #2
    HaWe
    Gast
    ist immer noch der von #7 !

    - - - Aktualisiert - - -

    gerade getestet:
    thread_local uint32_t counter = 0;
    macht hier auch keinen Unterschied

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    ja ... sorry ... hab ich nicht gesehen

    interessante ausgabe, gebe ich zu ... es wäre mal interessant zu erfahren wie der zeitliche ablauf bei der ausgabe aussieht! ich vermute hier das problem!

    benutze mal irgend einen timer mit einer auflösung im wenigstens 100tel Sekunden bereich und speichere vor und nach jedem sleep jeweils einmal die zeit und gib die zeiten plus die aktuelle zeit auch als print aus

    also quasi print("Jetzt: %d Vorher: %d Nachher %d",timer.now(), beforesleep, aftersleep)

    so kann man erstmal prüfen ob der sleep vernünftig funktioniert und dann ob der print hier irgendwelche delays verursacht

    ich denke dass die ausgaben bei dir nicht chronologisch korrekt ausgegeben werden
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  4. #4
    HaWe
    Gast
    hmmm... könnte vlt...
    andererseits wird in den blinker_thread zwischen dem ON/OFF-Paar gar nicht inkrementiert, also egal, wann das ausgegeben wird, es müsste 1 ON/OFF-Paar IMO erwartungsgemäß IMMER mit demselben gemeinsamen counter-Wert erscheinen...
    ...oder?

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    nicht zwingend, deswegen meinte ich ja ich vermute hier eine sogenannte race condition, ich würde gerne ausschließen dass der print hier dazwischen funkt und daher wollte ich auch dass du in einer print funktion gleichzeitig variablen und einen funktionsaufruf nutzt um mal einen einblick auf den ablauf zu bekommen und das sleep gleichzeitg zu testen (zwei sleeps in einem thread können je nach architektur lustige effekte haben)

    und mit architektur meine ich das thread handling und den "sheduler"
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  6. #6
    HaWe
    Gast
    ok, aber ich verstehe deinen code-Vorschlag noch nicht exakt.

    Könntest du das bitte mal in den ino-Code genau hineinschreiben, fertig compilierbar?

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    sorry, da müsste ich erstmal selber was probieren, hab keinen plan wie man auf die schnelle bei arduino nen timer hinbastelt
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  8. #8
    HaWe
    Gast
    update:
    mutex ist doch drin, braucht nur zusätzlich
    Code:
    #include <mutex>
    was ich nicht wusste,
    dann klappt jetzt auch

    Code:
    std::mutex print_mutex;
    
    void myPrint(String str) // String: Arduino API  // C++: std::string
    {
        print_mutex.lock();
        Serial.println(str);
        print_mutex.unlock();
    }

  9. #9
    HaWe
    Gast
    es gibt hier noch einen Bug oder Issue, wie man thread prios richtig setzt - bisher brachten alle Vorschläge noch keine Lösung.
    Man muss nämlich die thread prios der main loop prio angleichen, wenn beide ohne delays parallel laufen sollen
    (std::threads laufen nämlich per prio=5 per default, main loop nur bei default prio=1!!):
    Code:
    esp_pthread_cfg_t cfg;
      esp_pthread_get_cfg(&cfg);
      cfg.prio=1;
      esp_pthread_set_cfg(&cfg);
    funktioniert nicht, weil anfangs cfg noch keine Werte enthält und daher einen Fehler zurückgibt,

    und

    Code:
      esp_pthread_cfg_t cfg;
      if (esp_pthread_get_cfg(&cfg) != ESP_OK) {
          cfg = esp_pthread_get_default_config();
      }
      cfg.prio=1;
      if (esp_pthread_set_cfg(&cfg) != ESP_OK) {
          printf("esp_pthread_set_cfg failed\n");
          abort();
      };
    funktioniert auch nicht, weil die hier verwendete Funktion
    esp_pthread_get_default_config();
    nicht gefunden wird.

    siehe Topic-Posts u.a.
    https://github.com/espressif/ESP8266...SDK/issues/609
    https://github.com/espressif/esp-idf...ment-496157019
    und folgende...

    betroffene libs am ehesten wohl
    https://github.com/espressif/ESP8266...ts/pthread/src


    Hat jemand eine idee, wie es richtig geht?
    Geändert von HaWe (29.05.2019 um 08:02 Uhr)

  10. #10
    HaWe
    Gast
    update:
    der ESP32 scheduler arbeitet tatsächlich nur eingeschränkt preemptiv, u.a. da er vom FreeRTOS und seinem Watchdog abhängig ist, der nur begrenzt ausgeblendet/resetted werden kann,sobad ein Thread "stalled", und dann das gesamte System sich aufhängt.
    Außerdem scheint es dann auch Probleme mit threads zu geben, die auf den 2 cores laufen und dann (IIUC) ebenfalls zu Konflikten führen.

    update:
    trotz hoffnungsvoller Nachrichten in ESP32 github repo: noch immer nicht gelöst
    Geändert von HaWe (30.07.2019 um 10:17 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Esp32 a2dp in arduino IDE
    Von Flos6323 im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 27.06.2018, 15:28
  2. Installation des Arduino Core für ESP32 ohne GIT
    Von mischaka im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 0
    Letzter Beitrag: 26.04.2018, 07:20
  3. Arduino Cinque: RISC-V-Prozessor und ESP32 auf einem Board vereint
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 22.05.2017, 16:29
  4. Display für esp32?
    Von NotEvil im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 7
    Letzter Beitrag: 04.12.2016, 16:37
  5. Kugelgelenke - woher kriegen?
    Von Gottfreak im Forum Mechanik
    Antworten: 15
    Letzter Beitrag: 04.01.2005, 17:56

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen