Type .. End Type Strukturen in Bascom

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Type .. End Type Strukturen in Bascom

      Hallo zusammen

      Ich programmiere neben Basom auch gerne mal Arduino.
      Man lernt so die Unterschiede, aber auch die Vorzüge der jeweiligen Programmiersprache.

      In C/C++ gibt es Strukturen, mit denen man mehrere Variablen als eine Variable zusammenfassen kann.
      Das sieht etwa so aus:

      Quellcode

      1. // C Code-Schnipsel
      2. struct typeName // Variablentyp definieren
      3. {
      4. int wert1;
      5. byte wert2;
      6. byte wert3;
      7. word wert4;
      8. };
      9. typeName test; // Variable vom Typ typeName deklarieren
      Alles anzeigen



      Zugreifen kann man dann beispielsweise mit

      Quellcode

      1. // C Codeschnipsel
      2. test.wert1 = 12;
      3. test.wert2 = 30;


      Das kennen sicher die C-Programmierer. Eine solche Struktur finde ich aber äußerst praktisch und habe mich gefragt, ob Basom auch so etwas kennt.

      Nun, in der Basomhilfe ist nichts darüber zu finden, dennoch unterstützt Bascom Typen-Definitionen und deren Dimensionierung.

      Hier ein Beispiel, welches sich fehlerfrei compilieren lässt:

      BASCOM-Quellcode

      1. ' Bitmanipulation
      2. $Regfile = "m8def.dat"
      3. $HWStack = 32
      4. $SWStack = 32
      5. $Framesize = 32
      6. $Crystal = 8000000
      7. Dim wert as Byte
      8. Type typeName ' Typ definieren
      9. w1 as Byte
      10. w2 as Word
      11. w3 as Integer
      12. w4 as Single
      13. w5 as Double
      14. End Type
      15. Dim test as typeName ' Variable vom Typ typeName dimensionieren
      16. Do
      17. Loop
      Alles anzeigen
      Ich habe versucht auf die Variable test vom Typ typeName wie in C zuzugreifen:

      BASCOM-Quellcode

      1. ' Bascom Quellcode-Schnipsel
      2. test.w1 = 12
      3. wert = test.w1
      Hierbei gibt es allerdings Fehlermeldung vom Compiler.

      Fragen:

      • Weiß hier jemand mehr zum Thema Type-Strukturen in Bascom?
      • Sind Type-Strukturen in einer der nächsten Version offiziell möglich?
      • Ist evtl. die Bascom-Hilfe diesbezüglich noch nicht Up to Date?
      • Ist das ein Compiler-Bug? Aber warum erkennt der dann Fehlerfrei Dim Test as typeName?
      • Weiß jemand, wie man auf die Variablen in der Struktur zugreifen muss?
      Bin auf eure Infos gespannt. trinkende-smileys-210

      Gruß Mitch64
    • OK ich versuch mal zu erklären wozu man Type-Variablen verwenden kann.

      Nehmen wir als Beispiel einen Datenlogger, der soll an 8 Kanälen messen. Alle 8 Werte zusammen sind ein Datensatz.
      1. Kanal1: Spannung
      2. Kanal2: Strom
      3. Temperatur 1
      4. Temperatur 2
      5. etc


      Der Datensatz (8 Werte) kann dann als eine einige Variable verwendet werden.

      Quellcode

      1. Type Datensatz_t ' Datensatz definieren
      2. Kanal1 as Word
      3. Kanal2 as Word
      4. Kanal3 as Word
      5. Kanal4 as Word
      6. ...
      7. Kanal 8 as Word
      8. End Type
      9. Dim Datensatz as Datensatz_t




      In Zeile 10 habe ich jetzt eine Variable definiert, die intern 8 Word-Werte enthält.

      Die könnte man jetzt seriell senden oder empfangen via

      Quellcode

      1. PrintBin Datensatz ' Sendet 8 Word-Werte
      Genauso würde der Empfang laufen oder das schreiben/lesen ins EEProm.

      Möchte man einen gleitenden Mittelwert, kann man sich 8 dieser Datensätze als Buffer anlegen.

      So z.B.

      BASCOM-Quellcode

      1. Dim Datensatz(10) as Datensatz_t ' Als Array

      Es macht den Code übersichtlicher

      Auf herkömmlichen weg müsste man im 1. Beispiel so dimensionieren

      Dim Kanal1 as Word
      Dim Kanal2 as Word
      Dim Kanal3 as Word
      ...
      Dim Kanal8 as Word

      zum Senden Über Uart müsste man schreiben

      Quellcode

      1. PrintBin Kanal1; Kanal2; Kanal3; ... Kanal8
      Noch komplizierter wird es mit dem Array

      Dann muss man schreiben
      Dim Kanal1(10) as Byte
      Dim Kanal2(10 as Byte
      ...
      Dim Kanal8(19) as Byte



      Ich gebe @tschoeatsch recht, man kann es mit Arrays machen. Aber mit Type-Strukturen wird es übersichtlicher.

      Beantwortet das etwas die Frage?
    • stefanhamburg schrieb:

      Woher kennt Ihr die Weihnachtswunschliste von MCS?
      Oder ist das EUER Wunschdenken?

      (Wunschliste wäre ja auch die falsche Sicht - MCS bekäme das ja nicht geschenkt, sondern müsste es selbst implementieren.)
      Von hier :)

      mcselec.com/index.php//index2.…5bd15c5b5b3d8c8acb7740c78
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Typen und Objekte sind bei mir eher das Tagesgeschäft.
      Allerdings arbeite ich zum allergrößten Teil mit Programmiersprachen für Anwendungen unter WIN oder LINUX Systemen.
      Hier werden auch irre Mengen an Daten über diese Strukturen verarbeitet!

      Bei Bascom könnte ich mir es grundsätzlich vorstellen.
      Ein Argument dafür könnte für Mark sein, dass es in VB ebenfalls vorhanden ist.
      docs.microsoft.com/de-de/offic…rface-help/type-statement

      Ein Grund dagegen könnte sein, dass es bei den kleinen AVR entgegen der Direktive K:I:S:S läuft -> Keep It Stupid Simple
      Ich weiß nicht, ob es bei einfachen Dingen ein großer Vorteil wäre.
      In erster Linie ist es oft die Sorgfalt und Gewissenhaftigkeit beim Erstellen einer Software, welche diese lesbar und durchschaubar macht.
      Das fängt schon bei der Namensfindung von Variablen an!

      Allerdings habe ich bei SUSI damals auch ein HAL eingebaut. Eigentlich kann man in jeder Programmiersprache seine persönliche Sprachbegabung ausführen, man muss nur kreativ werden 8)

      Oftmals sind es die einfachen Dinge, die nicht konsequent genutzt und umgesetzt werden.
      Übung macht hier den Meister.

      Im Fall von Mitch scheint es mir eher so, dass er Grenzen von Bascom entdeckt :D
      Code first, think later - Natural programmer :D
    • Aber warum wird dann Type...End Type unterstützt? Auch eine Variable lässt sich deklarieren.

      Außerdem, ob ich die Variablen einzeln deklariere oder in einem Block. Der Speicherbedarf für die Variablen ist der selbe. Und auf die Members der Struktur wird genauso über die Adresse zugegriffen wie bei normalen Variablen.

      Ich sehe hier kein Nachteil, sindern ein Vorteil, wenn Bascom das nicht nur halb, sondern richtig unterstützen würde.

      Mit halb meine ich, Deklaration erlaubt, Verwendung nicht.
    • Nun, ich bin nicht Mark und habe keinen so detaillierten Einblick in den Compiler.
      Ich denke, deine Definition funktioniert, weil er die Zeilen mit "Type" irgendwie ignorirt. Was dann bleibt sind die Deklarationen.
      Ich frage Mark mal, warum das geht.

      Zum Anderen könntest du das auch folgend darstellen:

      BASCOM-Quellcode

      1. DIM type_vorname ( 10) AS string * 12
      2. DIM type_nachname ( 10) AS string * 12
      3. const mama=1
      4. const papa=2
      5. const bruder=3
      6. const schwester=4
      7. type_vorname( mama) = "Karin"
      8. type_nachname( mama) = "Müller"
      9. type_vorname( bruder) = "Erwin"
      10. type_nachname( bruder) = "Müller"
      Alles anzeigen
      Code first, think later - Natural programmer :D
    • Mark hat mir geantwortet, dass er bereits daran arbeitet, es aber noch nicht komplett integriert ist.
      ( Ich kann keine Aussagen darüber geben, wann es implementiert ist! Solche Zusagen gibt es nie von Mark)
      Solange nichts in der Hilfe dazu steht, geht es nicht.

      Wenn man den Code Explorer öffnet, kann man sehen, dass die IDE mit TYPES bereits umgehen kann, jedoch die Zuweisung zu Variablen noch nicht geht.

      BascomType.png
      Code first, think later - Natural programmer :D
    • Das ist lustig, das Bascom-Feature war mir bisher unbekannt (kann man so aber eh noch nicht verwenden).
      Wäre interessant zu wissen, seit welcher Version die Type-Definition funktioniert, ich fürchte schon länger ;)

      Ich arbeite gerade an einem Bascom-Precompiler (ist auch schon fast fertig, ein anderes Feature fehlt noch), der unterstützt unter anderem auch Types:

      Quellcode

      1. Typedef Subtype
      2. Addr As Word
      3. Value As Dword
      4. End Typedef
      5. Typedef Mytesttype
      6. Id As Byte
      7. Street As String * 20
      8. Param As Integer
      9. Nextptr As Rampointer
      10. Arr(5) As Word
      11. Child As Subtype
      12. Something As Byte
      13. End Typedef
      14. Dim Instance As Mytesttype
      15. Dim Testid As Byte
      16. Dim Teststreet As String * 50
      17. Dim Testparam As Integer
      18. Dim Testnextptr As Rampointer
      19. Dim Testarr(5) As Word
      20. Dim Testaddr As Word
      21. Dim Testvalue As Dword
      22. Instance = Malloc(Typedefsize(Mytesttype))
      23. Instance.id = Typedefsize(mytesttype)
      24. Instance.id = Testid
      25. Instance.street = Teststreet
      26. Instance.param = Testparam
      27. Instance.nextptr = Testnextptr
      28. Instance.arr(2) = Testarr(3)
      29. Instance.child.addr = Testaddr
      30. Instance.child.value = Testvalue
      31. Instance.something = Testid
      32. Testid = Instance.id
      33. Teststreet = Instance.street
      34. Testparam = Instance.param
      35. Testnextptr = Instance.nextptr
      36. Testarr(1) = Instance.arr(1)
      37. Testaddr = Instance.child.addr
      38. Testvalue = Instance.child.value
      39. Testid = Instance.something
      40. Free Instance
      Alles anzeigen
      Allerdings wird der Speicher nicht statisch allokiert, sondern C-style, mit Malloc/Free.
    • six1 schrieb:

      Was ich sagen kann ist, dass Mark sehr viel andere Arbeit hat und TYPE Strukturen nicht ganz oben stehen.
      Er integriert neuere Chips mit UPDI Support, was wohl im nächsten update kommt.
      Diese Nachricht finde ich VIEL besser, da stehen bald neue Möglichkeiten ins Haus.

      Danke für Deine Info @six1
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.