Ankündigung

Einklappen
Keine Ankündigung bisher.

Subroutinen und "folding editor"

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

    [Featurewunsch] Subroutinen und "folding editor"

    Hi,

    ich fände es sehr praktisch, das bestimmte Dinge in Subroutinen verschoben werden könnten. Durch die beschränkte Verschachtelung der if ... endif wäre es manchmal sehr schön bestimmte immer wiederkehrende Anweisungen sozusagen auszulagern.

    Weiterhin würde es prima sein, wenn man bestimmte Codebereich einfach ausknipsen könne wie es in manchen Programmierwerkzeugen der Fall ist.

    Gruß,
    Bernd


    #2
    Zitat von bmx Beitrag anzeigen
    Hi,

    ich fände es sehr praktisch, das bestimmte Dinge in Subroutinen verschoben werden könnten. Durch die beschränkte Verschachtelung der if ... endif wäre es manchmal sehr schön bestimmte immer wiederkehrende Anweisungen sozusagen auszulagern.

    Weiterhin würde es prima sein, wenn man bestimmte Codebereich einfach ausknipsen könne wie es in manchen Programmierwerkzeugen der Fall ist.

    Gruß,
    Bernd
    Zum Auslagern: Beschäftige dich mal mit den Makros. Die sind dafür gedacht.
    Zum Ausknipsen: Ich nehms mal als Featurewunsch auf.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Auslagern = Makros. Das ist ja wirklich eher was für 'ne Library. Aber es ist auch ziemlich viel Aufwand damit verbunden ein Makro zu schreiben.

      Deshalb dachte ich eine Möglichkeit für eine kleine Subroutine hier und da (ohne Parameter etc.) wäre schon nett.

      Gruß,
      Bernd

      Kommentar


        #4
        Zitat von bmx Beitrag anzeigen
        Auslagern = Makros. Das ist ja wirklich eher was für 'ne Library. Aber es ist auch ziemlich viel Aufwand damit verbunden ein Makro zu schreiben.

        Deshalb dachte ich eine Möglichkeit für eine kleine Subroutine hier und da (ohne Parameter etc.) wäre schon nett.

        Gruß,
        Bernd
        Ja, dann weiss ich nicht genau was Du meinst . Die Makros sind doch genau das:
        Du schreibst ganz normal Deinen Code und wenn er geht, lagerst Du die Sache in ein Makro aus. Oder mach mal bitte ein Beispiel.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Ich glaube, bmx will, dass man bestimmte Berechnungen in functions ausgelagert durchführen kann, die dann in unterschiedlichen Makros verwendet werden können.

          Kommentar


            #6
            Zitat von Topper Beitrag anzeigen
            Ich glaube, bmx will, dass man bestimmte Berechnungen in functions ausgelagert durchführen kann, die dann in unterschiedlichen Makros verwendet werden können.
            Gerade dafür sind die Markos da. Code, der öfters gebraucht wird, kann darin wie in einer Schablone vorgefertigt werden (also eine Art der Funktionsdefinition)
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              Ich habe jetzt auch mal ein wenig mit dem EibStudio probiert (mit Erfahrung in diverses Programmiersprachen und Entwicklungsumgebungen).

              Während der Prgrammentwickung entstehen oft Situationen, in denen ein bestimmter Programmcode mehrfach verwendet oder/und gekapselt werden soll.
              Deshalb wäre die Definition von Unterfunktionen/Subroutinen im Programmfenster sehr praktisch.

              (Macros sind da eher unpraktisch und schlecht zu erreichen / entwickeln. Debugging ist sehr mühsam.)

              Als Verbesserung wären mehrere Code-Fenster praktisch, ...
              ...in denen dann verschiedene Stellen des Anwendungsprogramms angezeigt werden können (vermeidet viel Scrolling bei längeren Programmen)
              ...oder (alternativ) in denen dann das Anwendungsprogramm und Macros angezeigt _und_ kompiliert werden können.

              Falls das schon möglich ist und ich das nur nicht gefunden habe bitte ich um Hinweis.

              Kommentar


                #8
                Zitat von MarkusL Beitrag anzeigen
                (Macros sind da eher unpraktisch und schlecht zu erreichen / entwickeln. Debugging ist sehr mühsam.)
                Die Anmerkung versteh ich nicht: Der Compiler zeigt bei Fehlern an, wie die Makros "expandiert" werden und wo ggf. Fehler entstehen.
                Die Expansion wird in die Datei tmpMacroOut.txt geschrieben und einfach an die Sektion [EibPC] angehängt. Das Debuggen geht dann 1:1 wie mit normalen Variablen, nur dass diese halt im Macro definiert werden.
                ...oder (alternativ) in denen dann das Anwendungsprogramm und Macros angezeigt _und_ kompiliert werden können.
                Falls das schon möglich ist und ich das nur nicht gefunden habe bitte ich um Hinweis.
                Ist dies - wie oben beschrieben- von mir damit beantwortet?
                offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                Enertex Produkte kaufen

                Kommentar


                  #9
                  Zitat von MarkusL Beitrag anzeigen
                  Als Verbesserung wären mehrere Code-Fenster praktisch, ...
                  Da das eigentliche Programm ein reines Textfile ist, besteht natürlich auch mit dem Editor deiner Wahl zu arbeiten...
                  Außerdem kann man den Compiler und nconf auch direkt ohne das Eibstudio nutzen

                  Michael
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #10
                    Soweit ich hier das richtig verstehe gibt es hier auch noch einen weiteren, aus meiner Sicht nicht ganz unerheblichen Unterschied:

                    Makros werden vor der Compilation expandiert und blähen so den Maschinencode auf, Subroutinen existieren auch im Maschinencode nur einmal und werden zur Laufzeit aufgerufen. Das kostet ein wenig mehr Laufzeit und spart ggf. ganz viel Speicher.

                    Meiner Meinung nach sollte es grundsätzlich dem Software-Entwickler überlassen bleiben, was er als Makro und was er als "echte" Subroutine implementieren will, denn nur er kann wissen welches für ihn der beste Kompromiss zwischen Laufzeit und Speicherbedarf ist.

                    Ich kenne keine ernstzunehmende Programmiersprache, die auf Subroutinen verzichtet (auch wenn sie sie nicht immer so nennen), aber viele, die auf echte Makros verzichten (aber manchmal Subfunktionen so nennen). Ich denke, es muß hier nicht extra erörtert werden, warum das so ist.

                    Zum Thema Editor:
                    Seht Euch mal Eclipse an (kostet nix) und überlegt, ob dafür ein Plugin sinnvoll sein kann. Dann muß das Rad nicht mehrfach erfunden werden.
                    Mfg
                    JH

                    Kommentar


                      #11
                      Zitat von JoeHorn Beitrag anzeigen
                      Soweit ich hier das richtig verstehe gibt es hier auch noch einen weiteren, aus meiner Sicht nicht ganz unerheblichen Unterschied:

                      Makros werden vor der Compilation expandiert und blähen so den Maschinencode auf, Subroutinen existieren auch im Maschinencode nur einmal und werden zur Laufzeit aufgerufen. Das kostet ein wenig mehr Laufzeit und spart ggf. ganz viel Speicher.
                      Subroutinen [im von Dir beschriebenen Sinn] sind derzeit nicht in Planung.

                      Wir wollten auch keine ganz allgemeine Programmiersprache entwicklen, sondern eine einfache Programmierumgebung, die dem Anwender auch nicht zuviel abverlangt.

                      Zum Aufblähen:
                      1. Unsere Testinstallation, an der ich so ziemlich viel unter "normalen" Bedingungen (d.h. bewohnt) teste hat Beschattung, Heizung, Lichter, Doppelclick, Webserver, UDP Telegramme. Dieses Programm erzeugt gerade mal 5.98% der möglichen Objekte.
                      2. Wenn die Optimierung (Firmware-Scheduler) fertig ist, wird er Compiler automatisch doppelte Ausdrücke entfernen. Es spielt dann absolut keinen Unterschied, ob man 100x oder 1x ein bestimmtes Codefragment aufruft. Im Prinzip funktioniert ja auch die Subroutinengeschichte so.

                      Zum Thema Editor:
                      Seht Euch mal Eclipse an (kostet nix) und überlegt, ob dafür ein Plugin sinnvoll sein kann. Dann muß das Rad nicht mehrfach erfunden werden.
                      Das überlassen wir denjenigen, die das wollen/brauchen. Immerhin ist die Struktur so, dass eibparser/nconf auch ohne EibStudio auskommen. Wer also will, kann auch mit dem emacs arbeiten

                      Michael
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar


                        #12
                        Hallo Michael,

                        eine ähnliche Antwort wie JoeHorn/Carsten wollte ich auch gerade tippen.

                        Verbesserungsvorschlag: Im Manual sollte die Möglichkeit, EIBParser.exe auch separat vom EIBStudio verwenden zu können eingefügt (bzw. besser herausgestellt) werden. Ich werde mal was mit eclipse versuchen.

                        Übrigens bin auch ich von der Kommunikation mit den Entwicklern und das Berücksichtigen/Implemetieren von Kundenwünschen angetan! (Wäre ja auch ein Eigentor wenn ihr diese Chance nicht nutzen würdet.) Weiter so!

                        Ich hoffe, ich kann in unser Budget bis Sylvester den EibPC einplanen...

                        Kommentar


                          #13
                          Zitat von MarkusL Beitrag anzeigen
                          Hallo Michael,
                          Verbesserungsvorschlag: Im Manual sollte die Möglichkeit, EIBParser.exe auch separat vom EIBStudio verwenden zu können eingefügt (bzw. besser herausgestellt) werden. Ich werde mal was mit eclipse versuchen.
                          Ehrlich gesagt, hätten wir
                          1. das nicht vermutet, dass dies jemand ernsthaft machen will.
                          2. das Handbuch, das ja für "jedermann" gedacht ist, nicht mit zu schweren Ballast füllen wollen.
                          3. Wenn jemand das so machen will, unterstütze ich ihn von hier soweit möglich.

                          Übrigens bin auch ich von der Kommunikation mit den Entwicklern und das Berücksichtigen/Implemetieren von Kundenwünschen angetan! Weiter so!
                          Danke.

                          Ich hoffe, ich kann in unser Budget bis Sylvester den EibPC einplanen...
                          Das hoffen wir alle (oder wie heisst das bei Galatica ... )
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar


                            #14
                            Hi Michael,

                            ich möchte Makros gerne für Dinge verwenden, die in ähnlicher Form immer wiederkehren, gerne auch Berechnungen. Aber sie sind in der laufenden Entwicklung unpraktisch weil sie eigentlich erst ausgelagert und zum Makro werden, wenn alles getestet ist.

                            Mir fällt zum Vergleich beim HS z.B. die Sequenz ein. Dort kann man eine bestimmte Folge von zeitlich definierten Anweisungen ausführen lassen von bestimmten Aktionen her.

                            Beispiel:
                            Ich habe einen Taster, der im Schlafzimmer auslöst: alles Licht im Zimmer aus.
                            Ich habe einen weiteren Taster, der ebenfalls alles Licht ausschaltet aber zusätzlich noch die Elektrogeräte ausschaltet.
                            Dann gibt es ein Zentral aus. Das soll u.a. ebenfalls alles Licht im Schlafzimmer ausschalten, die Elektrogeräte ausschalten etc.

                            Ich brauche also die Sequenz Licht im Schlafzimmer aus an drei verschiedenen Stellen. Wenn ich nun eine Subroutine definiere in der genau das erledigt wird, ist das Programm einfacher zu lesen. Natürlich kann ich das ganze später als Makro auslagern aber ich möchte das aufgrund des Aufwandes eigentlich gar nicht.

                            Ich hoffe das ist jetzt etwas ausführlicher, warum ich das gerne hätte.

                            Gruß,
                            Bernd

                            Kommentar


                              #15
                              Zitat von bmx Beitrag anzeigen
                              Hi Michael,
                              Mir fällt zum Vergleich beim HS z.B. die Sequenz ein. Dort kann man eine bestimmte Folge von zeitlich definierten Anweisungen ausführen lassen von bestimmten Aktionen her.

                              Beispiel
                              Ich brauche also die Sequenz Licht im Schlafzimmer aus an drei verschiedenen Stellen. Wenn ich nun eine Subroutine definiere in der genau das erledigt wird, ist das Programm einfacher zu lesen. Natürlich kann ich das ganze später als Makro auslagern aber ich möchte das aufgrund des Aufwandes eigentlich gar nicht.
                              Hi Bernd,
                              ich glaube. dass ein Teil Deines Verständnisses auch von der HS Welt geprägt wird. Es gibt beim eibpc nicht "verschiedene" Stellen.

                              Das was Du willst, würde ich wie folgt realisieren, und dabei den Code einfach und wartbar machen:

                              Code:
                               
                              [SIZE=3] // Taster GA-1/1/1: (Wert AUS) alles Licht im Zimmer aus.
                              SchlafenAus=AUS
                              if "GA-1/1/1"==AUS and event("GA-1/1/1") then SchlafenAus=EIN endif 
                              // Das Schalten
                              if SchlafenAus then write("[alles im Schlafzimmer aus]",AUS); SchlafenAus=AUS endif 
                              
                              //Weiterer Taster GA-1/1/2,alles Licht aus, zusätzlich noch die Elektrogeräte aus
                              ElektroAus=AUS
                              // Hier wird auch die "Schalfzimmer-Sequenz" getriggert.
                              if "GA-1/1/2"==AUS and event("GA-1/1/2") then ElektroAus=EIN;[/SIZE][SIZE=3]SchlafenAus=EIN[/SIZE][SIZE=3] endif 
                              // Über die Variable [/SIZE][SIZE=3]ElektroAus wird nun deren Schalt-Sequenz gestartet[/SIZE][SIZE=3]
                              if ElektroAus then write("[alles im Elektro aus]",AUS); ElektroAus=AUS endif [/SIZE]
                              Du siehst, dass die Variable SchlafenAus ihre "Sequenz" steuert. D.h. man kann die einfach setzen und nun wird der Code angesprungen.
                              Das ist beliebig kombinierbar und effizient.

                              Man kann mit dem Debugger sogar die Variable setzen und dann wird das von ihr Abhänige neu ausgewertet. Die Telegramme beobachtet man im Busmonitor. Damit ist noch nicht einmal eine Busankopplung notwendig. Man macht einfach "Trockenübungen". Aus eigener Erfahrung erhöht dies den WAF...

                              ich hoffe, das ist klarer (?)
                              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                              Enertex Produkte kaufen

                              Kommentar

                              Lädt...
                              X