ist immer noch der von #7 !
- - - Aktualisiert - - -
gerade getestet:
thread_local uint32_t counter = 0;
macht hier auch keinen Unterschied
Druckbare Version
ist immer noch der von #7 !
- - - Aktualisiert - - -
gerade getestet:
thread_local uint32_t counter = 0;
macht hier auch keinen Unterschied
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
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?
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"
ok, aber ich verstehe deinen code-Vorschlag noch nicht exakt.
Könntest du das bitte mal in den ino-Code genau hineinschreiben, fertig compilierbar?
sorry, da müsste ich erstmal selber was probieren, hab keinen plan wie man auf die schnelle bei arduino nen timer hinbastelt
völlig, nur irgend eine Zeitreferenz
soll natürlich jeweils für jeden sleep dann sleep1 sleep2 und sleep3 heißen damit man weis welcher gerade ausgegeben wirdCode:uint64_t vorher, nachher; //ich nehme einfach mal an dass millis uint64 ist
vorher= millis();
std::this_thread::sleep_for(one_sec);
nachher = millis;
Serial.println("sleep1:");
Serial.println(vorher);
Serial.println(nachher);
Serial.println(millis);
meine Vermutung ist, dass zwischen vorher und nachher immer rund 1000 Differenz ist, aber der 3te Wert zwischen den Sleeps vorwärts und rückwärts springt
oder, da wir neuen Code reinbringen, der counter plötzlich anfängt richtig zu zählen weil wir die racing condition brechen
danke,
und wie jetzt wo hin kopiert?
jeweils um die 3 Zeilen mit
"std::this_thread::sleep_for(one_sec);"
herum nur eben für jede ein anderes "sleep1" "sleep2" "sleep3"