Hallo Forum,
ich wurde gebeten meine Erfahrungen zur Programmiersprache Luna für AVR Mikrocontroller zu teilen, was ich mit diesem Thema gerne tun möchte.
Wie ich bei meiner Vorstellung schon geschrieben habe, konnte ich schon einiges an Erfahrungen sammeln und beantworte auch gerne Fragen dazu (soweit es mein Wissen zulässt). Dieses Thema soll keinen Sprachenkrieg anzetteln, er ist von mir ausschließlich dazu gedacht Interessierten einen Einblick zu gewähren und darüber zu diskutieren.
Worum gehts?
Es gibt da eine recht neue Programmiersprache namens Luna, die sich sprachlich an Basic, Pascal und C orientiert.
Sie ist aus meiner Sicht Basic/Pascal-ähnlich und kombiniert erfolgreich die objektorientierte Programmierung mit der klassischen Programmierung.
Webseite: http://avr.myluna.de
Screenshot: Bild von der aktuellen Version
Verfügbar für: Windows, Linux und Mac OS
Preis: kostenlos
Lizenz: Freeware/Quelloffen
Meine Erfahrungen
Was ich zuerst begrüße ist die Tatsache, dass die Entwicklungsumgebung für alle drei großen Betriebssysteme verfügbar ist. Ich benutze im Keller einen Linux-PC und im Arbeitszimmer der Wohnung einen Windows-PC. Hier muss ich also keine Umstellungen vornehmen und kann an beiden Rechnern arbeiten. Ich habe viele Jahre ausschließlich Assembler programmiert und bezüglich Hochsprachen habe ich Erfahrungen in Pascal (jedoch nicht auf Mikrocontrollern). Da ich damit sozusagen mich recht entspannt und unvoreingenommen nach einer Hochsprache für Mikrocontroller umsehen konnte, jedoch mit C syntaktisch irgendwie auf Kriegsfuß stehe, habe ich mich mit Bascom und auch Luna gleichermaßen beschäftigt. Schlussendlich bin ich dann bei Luna geblieben. Hier nun meine Erfahrungen an kleinen Beispielen, warum es sich lohnt sich damit auseinanderzusetzen.
Beispiele
Ein einfaches "Hallo Welt" in Luna sieht so aus (aus den mitgelieferten Beispielen):
Erläuterung: "avr" ist die sogenannte Basisklasse in Luna. Das ist mehr oder weniger der Controller selbst. Wie in der objektorientierten Notation üblich, unterteilt man Zugriffe auf solche Klassen oder Objekte mit einem Punkt. In der Dokumentation ist dann immer beschrieben welche Eigenschaften (Zahlenwerte oder Variablen) oder Methoden (Funktionen die man verwenden kann) ein solches Objekt oder eine solche Klasse hat. Es gibt viele solcher eingebauten Objekte oder Schnittstellen, die jeweils ihre entsprechenden Bestandteile zur Verfügung stellen. Zum Konfigurieren der seriellen Schnittstelle beispielsweise "uart".
Bitmanipulationen und Ausdrücke:
Man kann wie bei C oder Pascal beliebig lange Ausdrücke bauen und auch z.Bsp. das Schieben von Bits und Verknüpfungen direkt im Ausdruck vornehmen:
Das "d << 2" schiebt die Bits der variable "d" beispielsweise um zwei Bits nach Links.
Tabellen:
In Bascom kann man ja auf einen "Data-Bereich" mit setzen eines Zeigers zugreifen, in Luna ist das etwas eleganter, denn man fast hier z.Bsp. eine Tabelle in einem sogenannten Objekt zusammen, dem man dann einen Namen vergibt:
Wenn man dann darauf zugreifen will kann man das mit den praktischen Objektfunktionen von einem solchen Datenobjekt vornehmen:
So das war erstmal ein kleiner Einblick von meiner Seite. Mein Fazit hierzu ist, dass es sich durchaus lohnt sich damit auseinanderzusetzen und einen Blick zu wagen. Wenn man einmal verstanden hat wie es funktioniert (so wie ich), dann will man irgendwie nicht mehr davon weg.
Gruß vom Harry
ich wurde gebeten meine Erfahrungen zur Programmiersprache Luna für AVR Mikrocontroller zu teilen, was ich mit diesem Thema gerne tun möchte.
Wie ich bei meiner Vorstellung schon geschrieben habe, konnte ich schon einiges an Erfahrungen sammeln und beantworte auch gerne Fragen dazu (soweit es mein Wissen zulässt). Dieses Thema soll keinen Sprachenkrieg anzetteln, er ist von mir ausschließlich dazu gedacht Interessierten einen Einblick zu gewähren und darüber zu diskutieren.
Worum gehts?
Es gibt da eine recht neue Programmiersprache namens Luna, die sich sprachlich an Basic, Pascal und C orientiert.
Sie ist aus meiner Sicht Basic/Pascal-ähnlich und kombiniert erfolgreich die objektorientierte Programmierung mit der klassischen Programmierung.
Webseite: http://avr.myluna.de
Screenshot: Bild von der aktuellen Version
Verfügbar für: Windows, Linux und Mac OS
Preis: kostenlos
Lizenz: Freeware/Quelloffen
Meine Erfahrungen
Was ich zuerst begrüße ist die Tatsache, dass die Entwicklungsumgebung für alle drei großen Betriebssysteme verfügbar ist. Ich benutze im Keller einen Linux-PC und im Arbeitszimmer der Wohnung einen Windows-PC. Hier muss ich also keine Umstellungen vornehmen und kann an beiden Rechnern arbeiten. Ich habe viele Jahre ausschließlich Assembler programmiert und bezüglich Hochsprachen habe ich Erfahrungen in Pascal (jedoch nicht auf Mikrocontrollern). Da ich damit sozusagen mich recht entspannt und unvoreingenommen nach einer Hochsprache für Mikrocontroller umsehen konnte, jedoch mit C syntaktisch irgendwie auf Kriegsfuß stehe, habe ich mich mit Bascom und auch Luna gleichermaßen beschäftigt. Schlussendlich bin ich dann bei Luna geblieben. Hier nun meine Erfahrungen an kleinen Beispielen, warum es sich lohnt sich damit auseinanderzusetzen.
- Die IDE
In meinem Alter möchte ich nicht mehr mit einem Standardeditor arbeiten, ich wollte schon etwas modernes was mir die Arbeit der ordentlichen Strukturierung eines Codes abnimmt. Die IDE und der Editor sind da so wie ich es mir vorgestellt habe. Man hat farbliche Hervorhebungen, automatisches strukturieren des Codes, man kann Codebereiche ein- und ausklappen, es gibt eine Autovervollständigen-Funktion und viele hilfreiche Werkzeuge die man bei der Programmierung benötigt. Einige davon sind z.Bsp. die direkt erreichbaren Datenblätter der Mikrocontroller, die ganzen Adressen und Konstanten der Mikrocontroller, Editoren für Zeichensätze und Bilder für grafische Displays, sogar ein Disassembler ist seit der neuesten Version integriert. Das Arbeiten mit der IDE macht Spaß und im Vergleich wirkt die Bascom-IDE auf mich wie ein Notepad mit farbigen Buchstaben.
- Die Sprache
Die Sprache geht schon mehr in Richtung Basic/Pascal. Eine direkte Benennung kann ich hier aber gar nicht vornehmen, sie ist kein einfaches Basic, kein Pascal und schon gar kein C, enthält aber viele nützliche Elemente aus allen drei Sprachen, es ist halt Luna. Sie bietet sprachlich eine Mischung aus Objektorientierung und Standardprogrammierung. Die Dokumentation (PDF) ist sehr umfangreich und enthält zu jedem Befehl immer ein kleines Beispiel. Hier kommt man schnell dahinter wie etwas funktioniert.
- Die Objektorientierung
Bei Luna ist alles in Klassen oder Objekte zusammengefasst. Das bedeutet für den Programmierer, z.T. etwas mehr Schreibarbeit. Man wird aber mit einer wirklich guten Übersichtlichkeit belohnt. Die Objektorientierung sieht praktisch angewendet so aus, dass man wahlweise mit normalen Prozeduren und Funktionen arbeiten kann und zusätzlich die Möglichkeit hat solche mächtigen Bestandteile wie Klassen und Strukturen zu verwenden.
Wie muss man sich das vorstellen? Auf der Webseite gibts dazu ein wirklich passendes Beispiel:
Die Zugriffe und Schreibweisen der objektorientierten Programmierung sind der realen Welt nachempfunden. Zum Verständnis ein vereinfachtes Beispiel zu den Begriffen „Klasse“, „Objekt“, „Methode“ und „Eigenschaft“:
Wir haben ein Haus, in dem Haus befindet sich ein Schrank. Der Schrank hat Schubfächer und in den Schubfächern liegen Dokumente. In der Analogie zur objektorientierten Programmierung in Luna repräsentiert das Haus eine Klasse. Der Schrank der sich im Haus befindet ist ein Objekt. Möchte man nun ein Dokument aus dem Schrank im Haus holen, betritt man das Haus, geht zum Schrank, öffnet eine gewünschte Schublade und nimmt sich das Dokument. Eine Methode vom Objekt Schrank wäre hierfür öffneSchublade oder nimmDokument. Eine Eigenschaft wäre AnzahlSchubfächer.
Die Einzelnen Schritte unterteilt man durch einen Punkt, sodass der Aufruf aus obigem Beispiel so aussieht:
Ermitteln der Anzahl der Schubfächer vom Schrank:
Anzahl = Haus.Schrank.anzahlSchubfächer
Holen eines Dokumentes:
Haus.Schrank.nimmDokument( SchubfachNummer )
Beispiele
Ein einfaches "Hallo Welt" in Luna sieht so aus (aus den mitgelieferten Beispielen):
Code:
avr.device = attiny2313
avr.clock = 20000000 ' Quarzfrequenz
avr.stack = 4 ' Bytes Programmstack (Vorgabe: 16)
uart.baud = 19200 ' Baudrate
uart.Recv.enable ' Senden aktivieren
uart.Send.enable ' Empfangen aktivieren
print "Hallo Welt"
Do
Loop
Erläuterung: "avr" ist die sogenannte Basisklasse in Luna. Das ist mehr oder weniger der Controller selbst. Wie in der objektorientierten Notation üblich, unterteilt man Zugriffe auf solche Klassen oder Objekte mit einem Punkt. In der Dokumentation ist dann immer beschrieben welche Eigenschaften (Zahlenwerte oder Variablen) oder Methoden (Funktionen die man verwenden kann) ein solches Objekt oder eine solche Klasse hat. Es gibt viele solcher eingebauten Objekte oder Schnittstellen, die jeweils ihre entsprechenden Bestandteile zur Verfügung stellen. Zum Konfigurieren der seriellen Schnittstelle beispielsweise "uart".
Bitmanipulationen und Ausdrücke:
Man kann wie bei C oder Pascal beliebig lange Ausdrücke bauen und auch z.Bsp. das Schieben von Bits und Verknüpfungen direkt im Ausdruck vornehmen:
Code:
a = (a * b / c + (d << 2)) or 0b11101000
Tabellen:
In Bascom kann man ja auf einen "Data-Bereich" mit setzen eines Zeigers zugreifen, in Luna ist das etwas eleganter, denn man fast hier z.Bsp. eine Tabelle in einem sogenannten Objekt zusammen, dem man dann einen Namen vergibt:
Code:
data meineTabelle
.dw 0xa1b2
.db "hallo ich bin ein Text",0
enddata
Wenn man dann darauf zugreifen will kann man das mit den praktischen Objektfunktionen von einem solchen Datenobjekt vornehmen:
Code:
print "Größe der Tabelle in Bytes: ";str(meineTabelle.SizeOf)
print meineTabelle.CString(2)
print str(meineTabelle.WordValue(0))
So das war erstmal ein kleiner Einblick von meiner Seite. Mein Fazit hierzu ist, dass es sich durchaus lohnt sich damit auseinanderzusetzen und einen Blick zu wagen. Wenn man einmal verstanden hat wie es funktioniert (so wie ich), dann will man irgendwie nicht mehr davon weg.
Gruß vom Harry