Zitat von mobil750
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Kaenx-Creator - Erstelle KNX Produktdatenbanken mit GUI
Einklappen
X
-
Hallo Mike,
ich bin gerade wieder über ein Problem gestolpert.
Ich habe Probleme beim Einlesen der Parameter in meinem KNX Projekt. Es sind recht viele Parameter, die ich in einem Speicher ablegt habe. Ab einem bestimmten Parameter kommen nur noch falsche Werte beim readMemory. Meine Vermutung ist nun, dass die Parameter nicht in einen Speicher passen.
Deshalb habe ich nun 4 Speicherbereiche angelegt und die Parameter darauf aufgeteilt. Die Prüfung ist erfolgreich, beim Erstellen der knxProd kommt aber eine Exception und zum Schluß die Meldung "erfolgreich erstellt". Im output Verzeichnis ist allerdings nur die h-Datei und ein temp Ordner, der wahrscheinlich zur Erstellung der knxProd verwendet wird.
Mir ist momentan nicht ersichtlich wo mein Fehler liegt. Kannst du da wieder helfen?
Da stellt sich mir auch noch die Frage, wie denn eigentlich die Aufteilung der Parameter in die entsprechenden "Speicher" (Blöcke) im uC gesteuert wird.
Wenn ich mir die Debug Ausgabe des "knx.readMemory" ansehe, kann ich überheupt nicht nachvollziehen, wie hier die Parameter extrahiert werden. Ich habe da zumindest erwartet, dass der erste Parameter (offset 0, 1 Byte) zu erkennen sein sollte. Das passt aber überhaupt nicht zur Debug Ausgabe, der Parameterwert ist allerdings vom Wert korrekt eingelesen?!?
Kannst du da Licht ins Dunkel bringen?
Anbei wieder meine Datei.
Gruß
Helmut
Angehängte Dateien
Kommentar
-
Hi Helmut,
wie viel Parameterspeicher hast Du denn verwendet? Standardmäßig kann der OpenKNX-Stack 16kB, man muss schon eine große Applikation bauen, um da drüber zu kommen. Mehrere Speicherblöcke machen keinen Sinn. Wenn Du wirklich über 16kB kommst, müsst Du was an der Entwicklungsumgebung ändern, nicht an der ETS-Applikation.
Die Debug-Ausgabe von knx.readMemory() hat nichts mit Deinen Parametern zu tun. Das sind die Metadaten für den Stack.
Gruß, Waldemar
Kommentar
-
Hallo Helmut,
das Aufteilen des Speichers geht nur bei Absolutem Speicher.
Der Stack funktioniert aber nur mit Relativem Speicher (SystemB).
Zitat von mobil750 Beitrag anzeigenMeine Vermutung ist nun, dass die Parameter nicht in einen Speicher passen.
Wenn es automatisch erstellt wird, berechnet Kreator den tatsächlich belegten Speicher (Stichwort Heatmap anschauen).
Zitat von mobil750 Beitrag anzeigenAb einem bestimmten Parameter kommen nur noch falsche Werte beim readMemory
Nur diese Sachen werden dort ausgegeben, da es keinen Sinn macht den kompletten Parameterspeicher auszugeben.
Wie rufst du denn die Parameter aus dem Speicher ab?
Wie sieht der Parameter (und die .h) aus, ab dem es auftritt?
Das mit der "HelpTemp" Fehlermeldung kann ich mir nicht erklären.
Bei meinen Applikationen (und allen die ich getestet habe) trat das nie auf. ich schau mal ob ich heraus finden kann, woran das liegt.
Gruß MikeRun you clever boy and remember!
Kommentar
-
Eine kurze wichtige Info:
Ich habe gestern die Version 1.5.0 veröffentlicht.
Hauptaugenmerk lag auf der Ladezeitverkürzung beim Importieren oder Öffnen einer knxprod.
Es gab allerdings vorher einen Bug beim erstellen der Header Files.
Dies lies sich nur durch eine größere Änderung beheben.
Mask und Shift sind nun getauscht. Parameter werden also nun so ausgelesen:
Code:(knx.paramByte(PARAM_x) >> PARAM_x_Shift) & PARAM_x_Mask
Code:GETPARAM_x
Run you clever boy and remember!
Kommentar
-
Zitat von thewhobox Beitrag anzeigenMask und Shift sind nun getauscht. Parameter werden also nun so ausgelesen: Code:
(knx.paramByte(PARAM_x) >> PARAM_x_Shift) & PARAM_x_Mask
gibt es einen Grund, warum Du das jetzt so machst? Wenn Du erst shift machst, musst Du immer auch ein Mask machen - und Du musst die Maske umrechnen.
Wenn Du aber erst Mask machst, dann kann man Shift in 2 Fällen weglassen: Wenn Shift 0 ist oder wenn das Ergebnis bool soll. In beiden Fällen braucht man dann nicht mehr zu shiften.
Ist nur interessehalber, weil ich es eben genau andersrum mache im OpenKNXproducer...
Gruß, Waldemar
Kommentar
-
Zitat von mobil750 Beitrag anzeigenUm welchen Teil der openKNX SW handelt es sich?
Die aktuellste Version entweder per git neu pullen und kompilieren oder bei den Releases.
Zitat von mumpf Beitrag anzeigenmusst Du immer auch ein Mask machen
Wenn die Bits links aligned sind (also von links startend, 0b11100000) reicht auch ein shift (>> 5) ohne Mask.
Zitat von mumpf Beitrag anzeigenoder wenn das Ergebnis bool soll
Ich habe auch einiges von deinem producer abgeschaut, dann aber doch bewusst anderst gemacht, da ich einfach einen anderen Programmierstil habe.
Am Ende ist es aber gehüpft wie gesprungen^^
Gruß MikeRun you clever boy and remember!
- Likes 1
Kommentar
-
Hallo Mike,
habe nun die 1.5.0 erfolgreich im Einsatz. War ein gewisser Aufwand das mit GETPARAM umzusetzen, macht aber ein paar Dinge bei mir einfacher weil man sich nicht mehr um den Typ kümmern muss.
Ich hatte noch versucht bei den ENUM Parametern den Wert "-1" umzusetzen. Das funktioniert auch bei Überprüfen, bei Veröffentlichen gibt es dann aber zum Schluss eine Exception. Wäre vielleicht noch einen Check wert (?).
Gruß
Helmut
Kommentar
-
Hallo Mike,
heute bin ich noch über ein kleines Problem gestolpert.
Ich habe eine neue App erstellt und hatte beim Erstellen eines Parametertyps (Enum) einen nervösen Finger. Dadurch ist ein Aufzählungselement mehr enstanden als beabsichtigt. Das Problem liegt darin, dass ich keine Möglichkeit gefunden habe das überflüssige Element wieder zu entfernen.
Oder habe ich da was übersehen?
Gruß
Helmut
Kommentar
Kommentar