Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Ich krieg aber auch den Callback nicht rein gelinkt, weil er dafür einen static function call mit einer (bool*)(repeating_timer *rt) signatur haben will wenn ich das richtig verstehe.
Also ich verstehs nicht was da laufen soll um ehrlich zu sein...
Zusätzlich gibt es einen schönen Heartbeat, das wars aber dann auch schon
ohne Dualcore-Flag startet er schon und ist über die ETS programmierbar...
Allerdings blinkt die Programmier LED dann immer (eventuell einfach der normale Heartbeat?)
wenn man den Programmierknopf drückt, dann blinkt die LED schneller und der Controller ist auch im Programmiermodus, da ich in diesem Zustand die Adresse & Applikation programmieren konnte
Hast du auch die Methode loop1 und setup1 implementiert?
Der Core0 wartet auf die Rückmeldung von Core1, dass dieser fertig ist. Sprich du musst openknx.setup1() aufrufen.
Wenn diese nicht kommt, bleibt Core0 in einer Endlosschleife.
uint8_t GlobalSen = ParamTTD_CAP_Sensitivity; //Get the sensitivity from the parameter
cap->SetGlobalSensitivity(GlobalSen); //Set the sensitivity of the CAP1188
logDebugP("SetGlobalSensitivity: %i", GlobalSen); //Print the sensitivity to the debug output
Das ganze ist in der Setup()-function meines Moduls einprogrammiert.
Im Log bekomme ich aber jedes mal
Code:
TDD_Module: SetGlobalSensitivity: 0
Es gibt da noch dieses Flash-Modul, aber ich bin bis jetzt eigentlich davon ausgegangen, dass ich mich darum nicht kümmern muss, da die KNX-Facade das regelt?
Wenn ich mir code ansehe der die Flash-Klasse verwendet, dann kann ich da überhaupt keinen Bezug zur knxprod.h erkennen, da werden wild nacheinander bits und bytes aus dem flash gelesen.
Daher bin ich nun etwas verwirrt was im Endeffekt was genau macht.
Ja ich weis, multicore ist schwer zu debuggen, aber ich glaube die funktionen sind unabhängig genug, dass man das eine unabhängig vom anderen debuggen kann.
Ging mir da weniger um die allgemeinen Herausforderungen mit nebenläufigen Implementierungen, sondern die Nutzung eines Hardware-Debuggers: Das lief bei mir mit Dual-Core auf RP2040 bislang nicht brauchbar; will an dieser Stelle aber nicht behaupten dass das nicht grundsätzlich funktionieren könnte.
Nutzung des zweiten Kerns und noch mehr die Nutzung von Interrupts sollten nicht der erste Lösungsansatz sein. Soweit ich das aus Deinen Postings entnehmen kann, geht es darum alle etwa 20ms die LED-Farbe zu aktualisieren (das wäre für mich noch kein Indikator für den Bedarf), wobei ich nicht erkennen kann wie lange die Kommunikation mit den LEDs dauert. Mehr als 1ms?
Um ein besseres Gefühl für den Laufzeitbedarf zu erhalten, kannst Du das Debug-Flag OPENKNX_RUNTIME_STAT nutzen. Das liefert dann über die Konsole per Befehl (rundtime ...) Statistiken über die Ausführungsdauer der verschiedenen Module. Bin mir gerade nicht mehr sicher, ob ich den core1-Support schon integriert hatte (2023..) oder der noch in einem Entwicklungsbranch liegt. Wichtig: Alles was in Interrupts passiert wird nicht korrekt gemessen und dem gerade ausgeführten Modul zugeschlagen. Und die Messsung, sowie auch die Ausgabe der Messergebnisse auf der Konsole haben einen gewissen Overhead.
Ich versuche gerade einen bzw. mehrere Parameter zu laden
Ich stolpere da gerade über Deinen Text mit den Hinweisen zur Werteingabe (und den Fehlenden Spinner rechts im Eingabefeld): Kann es sein, dass der Parameter als String und nicht als passender Integer definiert ist?
Ich würde da zwei Parameter-Typen mit Wertebereich 0..1016 (>=10Bit) und 0..127 (>=7Bit) erwarten.
hmm, also interrupts hab ich in meinem "direkten" code eigentlich nicht drinnen.
Die LED's sind ws2812b Digitale LED's. angesteuert über FastLED. Der RP2040 ist seit 2021 in FastLED integriert. Wenn ich diesen Post https://github.com/FastLED/FastLED/pull/1261 richtig interpretiere nutzt die übertragung den PIO Kern des RP2040. Die übertragungszeit sollte damit quasi nicht vorhanden sein.
Die Library nutzt einen DMA Interrupt um Daten vom Memory ins PIO zu schaufeln, aber der sollte Zeitunkritisch sein.
ich würde den zweiten Kern für die ganze Color-Magic nutzen, da das eigentlich total unkritisch ist. Und eben meiner Meinung nach "nebenher" abgekoppelt von allem was KNX macht laufen kann.
momentan debugge ich allerdings noch mit dem Logger, da ich mir noch keine Zeit genommen hab meine BlackMagicProbe zu suchen (Ja ich weis, ich weis...)
Danke für den Hinweis mit dem Debugger, falls das gar nicht funktioniert debugge ich halt im SingleCore modus dann!
Die Threshholds sind texte, da hab ich mir einen Conversion-Helper geschrieben.
Die Size der Texte ist auch mit "+1" definiert für die Nullterminierung. Das würde ich aber erst angehen, wenn die zahlen funktionieren, da ein Layer an komplexität mehr.
- cad435
Der momentane Stand ist hier einzusehen: https://github.com/cad435/TAS-UP-4x-TouchRGB (ja ich weiß, ist sicherlich nicht schön, kommt alles noch, zuerst will ich mal verstehen was geht )
ich würde den zweiten Kern für die ganze Color-Magic nutzen, da das eigentlich total unkritisch ist. Und eben meiner Meinung nach "nebenher" abgekoppelt von allem was KNX macht laufen kann.
Das wird wahrscheinlich aber auch nicht komplett unabhängig von dem passieren was auf dem KNX-Bus läuft? Zugriffe auf den knx-Stack aus core1 solltest Du tunlichst unterlassen, da die Implementierung nicht auf eine nebenläufige Nutzung ausgelegt ist.
Die Threshholds sind texte, da hab ich mir einen Conversion-Helper geschrieben.
Die Size der Texte ist auch mit "+1" definiert für die Nullterminierung. Das würde ich aber erst angehen, wenn die zahlen funktionieren, da ein Layer an komplexität mehr.
Warum der Umweg über Strings? Du erlaubst ausschließlich ganzahlige Eingabewerte in einem festgelegten Intervall. Das wird direkt von ETS als Eingabewert unterstützt.
D.h. Du setzt nicht auf den Aufruf über Alarm-Pool?
Momentan nicht, da ich ihn nie zum laufen gebracht habe.
Das wäre die implementierung im Loop1
Code:
if (millis() - lastTimeLEDRun >= LEDFPSTime_ms) //If the time is up, run the LED's
{
FixedFPSLedLoop(); //Run the LED's
lastTimeLEDRun = millis(); //Set the last time the LED was run to the current time
}
Zugriffe auf den knx-Stack aus core1 solltest Du tunlichst unterlassen
Habe ich auch nicht vor. Wüsste auch nicht wieso. LED Farbe wird eventuell über den bus gesendet, aber die Variable wird auch vom "Loop0" abgeholt und gesetzt.
Der loop1 würde dann die Farbe nehmen, die Dimmwerte berechnen und sie an den LED-Controller übergeben.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar