Ankündigung

Einklappen
Keine Ankündigung bisher.

VSC + PlatformIO + Link auf externe eigene Libs

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    VSC + PlatformIO + Link auf externe eigene Libs

    Hallo,

    ich habe ein PlatformIO Anfängerproblem.

    Ich möchte in meinem Projekt im Unterverzeichnis /lib eigene - zentral gehaltene Libs - per symbolischen Link in mein Projekt einbinden, so wie es z.B. auch im "OAM-LogicModule" gemacht wird - siehe Bild.

    PlatformIO-lib.png

    Mein erster Versuch war in meinem Projekt unter /lib eine Verknüpfung per Windows Explorer anzulegen. Das geht schief, man sieht nur das Verzeichnis aber nicht die Dateien darunter und es wird im PIO Explorer kein Link Symbol angezeigt.

    Ich denke das muss über PlatformIO erfolgen, habe aber bisher noch keine Beschreibung gefunden, die passen würde.
    Auch das Studium der OAM-LogicModule platformio.ini hat mich nicht weitergebracht, ich sehe da keinen Verweis auf die externen Quellen für knx und OGM-Common.

    Kann mir hier jemand auf die Sprünge helfen?

    Danke und Gruß
    Helmut


    #2
    Hi Helmut,

    es ist kein Windows-Link, sondern ein Symlink. Lies mal was zu mklink in der Windows-Kommandozeile nach.
    Aber am einfachsten wäre es, wenn Du die Library einfach ins Lib-Verzeichnis kopierst.
    Sorry, noch einfacher ist es, wenn Du in pio.ini den Eintrag lib_deps verwendest, z.B.
    Code:
    lib_deps =
      adafruit/Adafruit VEML7700 Library @ 2.1.0
    ​
    Gruß, Waldemar
    Zuletzt geändert von mumpf; 12.06.2023, 19:03.
    OpenKNX www.openknx.de

    Kommentar


      #3
      Nein du must echte Links per mklink anlegen. Wenn es aber nur eine externe Lib ist, ist dieser Weg nicht immer sinnvoll. Das macht man normal per Dependency in der library.json. Wir machen das nur, weil wir in den Libraries Dateien für den Producer verwenden wollen.

      PS: Kleiner Hnweis, wir bauen gerade den kompletten OpenKNX Stack um. Der aktuelle Stand liegt in "modular" und die Klingel "SOM-UP" kannst du als Vorlage nutzen.
      OpenKNX www.openknx.de | OpenKNX-Wiki (Beta)

      Kommentar


        #4
        Danke für den Tip mit "mklink", das hat mein Problem gelöst.

        Noch eine Nachfrage zu "wir bauen gerade den kompletten OpenKNX Stack um".
        Was bedeutet das für mich / alle anderen OpenKNX User? Ist das innerhalb von "knx" oder muss vorhandener Code umgeschrieben werden?

        Wird der überarbeitet KNX Stack dann den aktuellen ersetzen oder ist das ein komplett neuer Pfad?

        Kommentar


          #5
          Der KNX Stack ist kein OpenKNX. Und der Umbau ist groß und bedarf größerer Anpassungen wenn du echte openknx Module bauen möchtest. Also zb auch Logikmodul etc. integrieren möchtest. Sollte dich das interessieren schau dir den branch modular an. Oder das som-up das arbeitet komplett darauf.
          OpenKNX www.openknx.de | OpenKNX-Wiki (Beta)

          Kommentar


            #6
            OK, wenn ich das richtig verstehe, verwendet ihr in OpenKNX den "knx Stack" von thelsing - an dem wird auch gerade etwas konzeptionell umgebaut, wenn ich mich an die letzten Meldungen erinnere. Das sind aber nicht die großen Änderungen am "OpenKNX Stack" die du erwähnt hast? Sehe ich das richtig?



            Kommentar


              #7
              Ich spreche von openknx (dem OGM-Common repo). Der KNX Stack ist unabhängig auch wenn wir daran mit optimieren
              OpenKNX www.openknx.de | OpenKNX-Wiki (Beta)

              Kommentar


                #8
                Zitat von mobil750 Beitrag anzeigen
                an dem wird auch gerade etwas konzeptionell umgebaut, wenn ich mich an die letzten Meldungen erinnere.
                Nein, eigentlich nicht. Das sind kleine Optimierungen. Die aktuell hauptsächlich aus dem OpenKNX-Team getrieben werden.
                Breaking changes gibts da eigentlich keine.

                Zitat von mobil750 Beitrag anzeigen
                Das sind aber nicht die großen Änderungen am "OpenKNX Stack" die du erwähnt hast? Sehe ich das richtig?
                Vor dem "modular" genannten Umbau gab es eigentlich nur sehr wenig gemeinsame Firmware. Da war ein wenig Initialisierung, das wars.

                Das OGM-Common von dem wir nun sprechen bietet eine saubere Modul-Schnittstelle, eine Art Scheduler, eine serielle Konsole mit diversen Basis- und Service-Funktionen, Flash-Verwaltung, Prog- und Info-LED Ansteuerung, diverse Logging-Funktionen usw usw... an den 350 commits sieht man, da wurde einiges geschaffen !
                OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

                Kommentar


                  #9
                  Hallo Dominik,

                  danke für die Erläuterung, das macht einiges klar. Es ist wirklich unglaublich was ihr da aufgestellt habt.
                  Ich habe Programmiererfahrung bin aber bei C noch in der Einsteigerphase und habe da - bei eurem professionellen Code - meine Probleme alles zu überreißen. Ich bleibe aber dran. Die Anwendungen die ihr da bereitstellt (z.B. OAM-LogicModule, SOM-UP, ...) sind ja schon sehr zielgerichtet an eurem Bedarf und daher sehr umfangreich.
                  Keine Kritik - aber für Einsteiger in C und die OpenKNX Welt und euren KNX Stack sind diese Beispiele m.M. nach nicht wirklich geeignet. Es wäre da sehr hilfreich, wenn es ein kleines Beispiel auf PIO und OpenKNX Basis gäbe, bei dem die Umsetzung der wesentlichen KNX Funktionen gezeigt werden, z.B. Senden eines ComObjects, Empfangen eines ComObjects und dessen Auswertung, sodass es als eine Art Template für eigene Versuche verwendet werden kann.
                  Die vorhandenen Beispiele sind da leider auch nicht wirklich hilfreich, weil die genannten Beispiele nicht enthalten sind bzw. nur auf Arduino funktionieren.

                  Aber nun zum Hintergrund meiner Nachfragen. Ich habe an Hand eurer Beispiele in der Arduino IDE 2.x eine FW geschrieben, die auf SAMD21 basiert. Die funktioniert tadellos. Ein Umsetzen auf PiPico scheitert aber an der Arduino IDE (und wahrscheinlich meiner Kenntnisse). Wir waren dazu schon in Kontakt und dein Tipp war auf PIO umzusteigen. Das habe ich gemacht und konnte das Projekt zu 90% auch umsetzen. Es basiert noch nicht auf OpenKNX Stack, ich möchte es aber baldmöglichst aktiv einsetzen und daher meinen Weg erstmal weitergehen. Ich kann die PiPico FW in PIO kompilieren, hochladen, die PA und auch die Parameter über ETS programmieren.
                  Wenn ich aber eine Gruppenadresse programmieren will bleibt die Programmierung nach ca. 90% hängen, der Controller rebootet und bleibt im knx.readmemory hängen.

                  Der für mich ersichtliche Unterschied zwischen SAMD21 und PiPico FW ist, dass die ComObjekte in der PIO nicht wirklich mit einem DPT verknüpft werden (zumindest erkenne ich das nicht) und es deshalb zu dem Problem kommt.

                  Ich habe mal mein Projekt auf eine main.cpp eingedampft, in der nur noch die KNX spezifischen Teile enthalten sind und das Verhalten so ist wie oben beschrieben. Könnte da mal jemand kurz drüberschauen (Anhang) und mir einen Tipp geben?

                  Was mich wundert ist, dass ich in der SAMD21 Version
                  grpObjHeartbeat.dataPointType(DPT_Value_2_Ucount);

                  verwenden kann, in der PIO Version gibt es "dataPointType()" nicht, bzw. ist nicht per entsprechendem #define enabled - wie ich gesehen habe.
                  Für "callback()" gilt wahrscheinlich gleiches.

                  Danke im Voraus
                  Helmut
                  Angehängte Dateien

                  Kommentar


                    #10
                    Hi Helmut,

                    auch wenn Du von der PIO-Version sprichst: dataPointType(...) ist eine Funktion vom KNX-Stack. Diesen kann man in 2 verschiedenen Varianten betreiben,
                    • klassisch mit dem "normalen" KO, bei denen jedes KO ein DPT und einen eigenen callback haben kann
                    • als "SMALL_GROUPOBJECT", bei denen die KO sehr viel weniger Speicherplatz verbrauchen. Dann muss der DPT beim lesen vom KO angegeben werden und es gibt einen globalen callback für alle KO, wodurch der callback-Empfänger (also der "gerufene") selber dann entscheiden muss, ob es das "richtige" KO für ihn ist.
                    Anders gesagt: Nimm in der platformio.ini von Deinem Projekt das SMALL_GROUPOBJECT raus und schon wird das gehen.
                    Wenn Du aber in Zukunft OpenKNX-Module verwenden können willst (also z.B. das Logikmodul in Deiner Firmware integrieren willst), solltest Du SMALL_GROUPOJBECT lassen und die andere Zugriffsart verwenden.
                    Lesen:
                    Code:
                    x = grpObjHeartbeat.value(DPT_Value_2_Ucount)
                    bzw. schreiben:
                    Code:
                    grpObjHeartbeat.value(x, DPT_Value_2_Ucount)
                    Gruß, Waldemar
                    OpenKNX www.openknx.de

                    Kommentar


                      #11
                      Zitat von mobil750 Beitrag anzeigen
                      Keine Kritik - aber für Einsteiger in C und die OpenKNX Welt und euren KNX Stack sind diese Beispiele m.M. nach nicht wirklich geeignet. Es wäre da sehr hilfreich, wenn es ein kleines Beispiel auf PIO und OpenKNX Basis gäbe, bei dem die Umsetzung der wesentlichen KNX Funktionen gezeigt werden, z.B. Senden eines ComObjects, Empfangen eines ComObjects und dessen Auswertung, sodass es als eine Art Template für eigene Versuche verwendet werden kann.
                      Die vorhandenen Beispiele sind da leider auch nicht wirklich hilfreich, weil die genannten Beispiele nicht enthalten sind bzw. nur auf Arduino funktionieren.
                      Ja, da hast du recht und den Bedarf dafür hab ich auch bereits erkannt. Nur "machen" müsste man halt mal
                      OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

                      Kommentar


                        #12
                        Falls du da mal was machst, stelle ich mich gerne als "Verständnis-Tester" zur Verfügung ...

                        Kommentar


                          #13
                          Ich muss mich nochmals melden ...

                          mumpf: danke für den Beitrag, nun kann ich den DPT einstellen und verstehe auch etwas mehr aus dem OGM-Common Zweig.

                          Aber das Ergebnis ist immer noch das gleiche. Sobald ich eine Gruppenadresse programmieren will bleibt die FW hängen. Im Log steht dann

                          frame with invalid crc ignored
                          beforeTablesUnload called
                          ... but not executed due to missing configuration data
                          loop(): >>>>>> KNX not configured yet ...
                          input buffer overrun: 10

                          Im Anhang habe ich das gesamte Log ab Reset beigefügt. Nun bin ich ratlos ...
                          Angehängte Dateien

                          Kommentar

                          Lädt...
                          X