Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter fuer schwierige und grosse Gaerten im Test

 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=LunaAVR=
 
=LunaAVR=
  
LunaAVR ist eine neue objektbasierte Programmiersprache für [http://www.atmel.com Atmel® AVR® Mikrocontroller], deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen wie [http://www.realsoftware.com RealStudio®] oder [http://www.java.com Java®] orientiert. Sie ist mit einer einfach zu erlernenden Syntax ausgestattet und eignet sich für die effiziente und zeitsparende Entwicklung von kleinen bis großen Softwareprojekten für AVR Mikrocontroller.
+
[[Bild:r8s01.jpg|thumb|Luna-IDE]]
 +
[[Bild:r8s02.jpg|thumb|Disassembler]]
 +
[[Bild:r8s03.jpg|thumb|LCD-Zeichenditor]]
 +
[[Bild:r8s04.jpg|thumb|GLCD-Pictureeditor]]
 +
[[Bild:r8s05.jpg|thumb|GLCD-Fonteditor]]
  
LunaAVR ist ein junges Projekt, kostenlos und man kann an der Entwicklung der Sprache mitwirken.
+
Luna ist eine objektbasierte, moderne Basic- oder Pascal-ähnliche Programmiersprache, deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen orientiert. Sie ist mit einer durchdachten und verständlichen Syntax ausgestattet, bietet jedoch im Gegensatz zu einfacheren Basic-Sprachen wie z.Bsp. BASCOM, wesentlich komplexere Möglichkeiten auf technischer Augenhöhe mit Pascal und C/C++. Sie eignet sich damit für die effiziente und zeitsparende Entwicklung von kleinen bis hin zu großen, anspruchsvollen Softwareprojekten für AVR Mikrocontroller.
  
Sämtliche Bibliotheksfunktionen auf die im Hintergrund zugegriffen werden, sind in Assembler geschrieben. Der erzeugte Code wird beim Kompiliervorgang wahlweise auf Länge oder Geschwindigkeit optimiert. Das erzeugte Binary ist von der Größe her vergleichbar mit existierenden Hochsprachen wie [http://winavr.sourceforge.net|C/C++]. Die Geschwindigkeit liegt auf dem Level von C/C++ und ist damit bis zu 10x schneller als vergleichbarer Code aus BASCOM®. LunaAVR unterliegt wie auch C/C++ keiner Beschränkung bei der Tiefe von Ausdrücken. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (z.Bsp. dynamische Strings oder Strukturen).
+
Luna besteht aus integrierter Entwicklungsumgebung, einem Präprozessor, Compiler und Assembler. Software kann wahlweise in der IDE oder in einem normalen Texteditor geschrieben werden.
  
==Status des Projekts==
+
Die IDE bietet hierbei zusätzlich zu den allgemein wünschenswerten Funktionen wie Syntaxfärbung, automatischer Einrückung, Strukturierung von Bedingungen inklusive Ein- und Ausklappfunktion, eine direkte Unterstützung der in Luna abgebildeten Hardware und Software-Objekte bzw. -Klassen der einzelnen AVR Controller. Zusätzlich sind ein Bibliothekseditor, Verzeichnis der Controller-Defines und weitere nützliche Werkzeuge vorhanden.
  
===Programme===
+
Das erzeugte Binary und die Ausführungsgeschwindigkeit sind von der Größe her vergleichbar mit existierenden Hochsprachen wie z.Bsp. C/C++. Es gibt keine Beschränkung bei der Tiefe von Ausdrücken wie z.Bsp. in BASCOM. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (dynamische Strings oder Speicherblöcke), Speicherstrukturen, dynamische Objekte, selbst erstellbare Klassen und Datenstrukturen.
* Editor (speziell angepasster Editor, Basis für IDE), Version 2.1.332 (derzeit noch nicht veröffentlicht)
+
* Compiler Version 0.1.64_alpha (derzeit noch nicht veröffentlicht)
+
  
====ausstehend====
+
Die AVR-spezifischen Code-Teile sind quelloffen und vollständig in Assembler geschrieben.
* IDE
+
* Assembler
+
  
===Bibliotheken===
+
==Status des Projekts==
* '''Typkonvertierungen'''
+
** Integer<>Single
+
** Integer<>String
+
** Single<>String
+
  
* '''Speicherverwaltung'''
+
Luna bietet eine vollwertige, kostenlose Entwicklungsumgebung mit Compiler, Präprozessor, Assembler und Disassembler. Zusätzlich ist ein Library-Browser/Editor integriert, mit dem man die Standardbbliotheksfunktionen des Compilers einsehen und editieren kann (Assembler). Luna ist zudem für Windows, Linux und Mac-OS verfügbar.
** dynamische Objekte
+
** Strukturen
+
** Variablen
+
** Arrays
+
  
* '''Eeprom'''
+
Es sind sehr umfangreiche Befehle und Funktionen zur Stringmanipulation, Speicherverwaltung, Bitmanipulation, Arithmetik (inklusive einer Fließkommaarithmetik) uvm. implementiert.
** Strukturen
+
** Variablen
+
** Arrays
+
 
+
* '''Flash (Data)'''
+
** Strukturen
+
** Konstanten
+
 
+
* '''Math'''
+
** Integer 8-32 Bit
+
*** Addition
+
*** Subtraktion
+
*** Multiplikation
+
*** Division
+
*** Fast Increment
+
*** Fast Decrement
+
 
+
** '''Floating Point (Single)'''
+
*** Addition
+
*** Subtraktion
+
*** Multiplikation
+
*** Division
+
*** Fast Increment
+
*** Fast Decrement
+
 
+
* '''String'''
+
** Instr()
+
** Left()
+
** Right()
+
** Mid()
+
** Upper()
+
** Lower()
+
 
+
* '''UART'''
+
** Konfiguration
+
** Eingabe
+
** Ausgabe
+
 
+
* '''Standardfunktionen'''
+
 
+
====ausstehend====
+
* Math: Mul/Div 8-32 Bit Integer für Classic Core
+
  
 +
[http://avr.myluna.de/doku.php?id=de:befehlsuebersicht Der Befehlssatz von Luna]
  
 
== Aufbau und Struktur ==
 
== Aufbau und Struktur ==
  
LunaAVR ist eine '''objektbasierte''' Programmiersprache und damit eine Zwischenform von prozeduraler und objektorientierter Programmiersprache.
+
Luna ist eine objektbasierte Programmiersprache.
  
Die Implementation der Objektbasierung richtet sich nach den Hardware-Gegebenheiten der AVR-Mikrocontroller. In [http://de.wikipedia.org/wiki/Atmel_AVR AVR Mikrocontrollern] wird der [http://de.wikipedia.org/wiki/Maschinencode Maschinencode] im Flashspeicher abgelegt, womit Programmteile nicht vererbt oder kopiert werden können, um sie an anderer Stelle auszuführen. Weiterhin sind die Ressourcen in Mikrocontrollern stark begrenzt.
+
Im Unterschied zur „normalen“ rein prozeduralen Programmierung, sind bei der objektbasierten/objektorientierten Programmierung sogutwie alle Elemente der Programmiersprache in bestimmte Strukturen zusammengefasst. Diese Struktur beeinflusst auch die Art und Weise der Syntax, also wie man eine gewünschte Funktionalität schriftlich ausdrückt.
  
Damit eine effiziente und speicherplatzsparende Programmierung möglich wird, ist die Objektbasierung in LunaAVR nicht überladen. Dem Programmierer soll unnötige Arbeit abgenommen und möglichst weitreichende Vorteile objektorientierter Programmierung bei gleichzeitigem vollen Zugriff auf alle Ressourcen zur Verfügung gestellt werden.
+
Jeder AVR-Mikrocontroller ist intern als eine sogenannte „Klasse“ (die Basisklasse) implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt. Die davon abgebildeten Objekte erben die Eigenschaften bzw. Attribute dieser Basisklasse, sodass beispielsweise bestimmte Methoden und Eigenschaften nur dann zugänglich sind, wenn sie in der übergeordneten Klasse (in diesem Fall der Controller) vorhanden sind.
 
+
Jeder AVR-Mikrocontroller ist intern als eine sogenannte "Klasse" implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt.
+
 
+
Darauf basierend werden Objekte abgeleitet, beispielsweise vom Arbeitsspeicher das Objekt "MemoryBlock" oder Variablen usw.
+
<pre>
+
    Avr
+
      |
+
      +-- Eigenschaften
+
      |        |
+
      |        + Controller-Typ
+
      |        + Stack-Size
+
      |        + Größe Arbeitsspeicher
+
      |        + Größe Eeprom
+
      |        + Taktrate
+
      |        + ..
+
      +-- Objekte
+
      |      |
+
      |      + UART
+
      |      |  |
+
      |      |  + Eigenschaften
+
      |      |  |      |
+
      |      |  |      + Baudrate
+
      |      |  |      + Daten bereit zum empfangen
+
      |      |  |      + Daten bereit zum senden
+
      |      |  + Methoden
+
      |      |  |    |
+
      |      |  |    + Senden
+
      |      |  |    + Empfangen
+
      |      |  + Events
+
      |      |        |
+
      |      |        + Daten empfangen
+
      |      |        + Daten gesendet
+
      |      + Ports
+
      |      |  |
+
      |      |  + Eigenschaften
+
      |      |          |
+
      |      |          + Wert
+
      |      |          + PortBit
+
      |      |              |
+
      |      |              + Eigenschaften
+
      |      |                      |
+
      |      |                      + Wert
+
      |      + Arbeitsspeicher
+
      |      |        |
+
      |      |        + Objekte
+
      |      |            |
+
      |      |            + Variablen
+
      |      |            |    |
+
      |      |            |    + ..
+
      |      |            + MemoryBlock
+
      |      |                  |
+
      |      |                  + Methoden
+
      |      |                        |
+
      |      |                        + ByteValue
+
      |      |                        + IntegerValue
+
      |      |                        + WordValue
+
      |      |                        + LongValue
+
      |      |                        + SingleValue
+
      |      |                        + StringValue
+
      |      + ..
+
      + Methoden
+
            |
+
            + ..
+
</pre>
+
Man kann nun auf die Eigenschaften und Methoden der Objekte zugreifen um die gewünschten Ziele zu erreichen. Dies vereinfacht den Zugriff auf die Hardware, minimiert die Fehlerrate, dient der Übersichtlichkeit im Programmcode. Dies erleichtert den Weg zur effizienten und zügigen Softwareentwicklung.
+
 
+
'''Die grundlegende Programmstruktur ist im Allgemeinen Folgende:'''
+
 
+
* Controllerdefinition
+
** Konfiguration
+
** Deklarationen
+
** Hauptprogramm
+
*** Unterprogramme
+
*** Datenstrukturen
+
  
 +
Luna unterstützt [http://de.wikipedia.org/wiki/Klasse_%28Programmierung%29 Klassen], womit Module und in sich geschlossene Codebereiche erstellt werden können.
  
 
==Weblinks==
 
==Weblinks==
 
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]
 
* [http://avr.myluna.de Offizielle Dokumentationsseite vom LunaAVR-Projekt]
 
+
* [http://avr.myluna.de/doku.php?id=de:download Download aktuelle Version]
 
+
* [http://avr.myluna.de/doku.php?id=de:beispiel-sourcen Beispiel-Sourcen]
  
 
[[Kategorie:Microcontroller]]
 
[[Kategorie:Microcontroller]]
Zeile 169: Zeile 47:
 
[[Kategorie:Quellcode LunaAVR]]
 
[[Kategorie:Quellcode LunaAVR]]
  
'''BeispielSource: Terminal'''
+
'''BeispielSource: helloworld.luna'''
 
<pre>
 
<pre>
 
avr.device = attiny2313
 
avr.device = attiny2313
avr.clock = 20000000         ' Quarzfrequenz
+
avr.clock = 20000000         ' Quarzfrequenz
avr.stack = 32                ' Bytes Programmstack (Vorgabe: 16)
+
avr.stack = 16              ' Bytes Programmstack (Vorgabe: 16)
uart.baud = 19200            ' Baudrate
+
uart.Recv.Enable
+
uart.Send.Enable
+
  
dim chars as string
+
uart.baud = 19200            ' Baudrate
 +
uart.Recv.enable            ' Senden aktivieren
 +
uart.Send.enable            ' Empfangen aktivieren
  
print 27 ; "[21" ; 27 ; "[2J" ; chr(27) ; "c" ; 27 ; "[?6l"; ' Terminal setup (VT100 clear)
+
print "Hallo Welt"
  
 
Do
 
Do
  inpstr " terminal > ",chars
 
  select case chars
 
  case "hallo"
 
    print "jenau, wie gehts?"
 
  caseelse
 
    print "Sie haben eingegeben: "+34+chars+34
 
  endselect
 
 
Loop
 
Loop
 
</pre>
 
 
'''Beispielsource: Exceptions'''
 
<pre>
 
avr.device = atmega32
 
avr.clock = 20000000          ' Quarzfrequenz
 
avr.stack = 32                ' Bytes Programmstack (Vorgabe: 16)
 
uart.baud = 19200            ' Baudrate
 
uart.Recv.Enable
 
uart.Send.Enable
 
 
dim chars as string
 
dim m,m1 as memory
 
 
print 27 ; "[21" ; 27 ; "[2J" ; chr(27) ; "c" ; 27 ; "[?6l"; ' Terminal setup
 
 
Do
 
  inpstr " test > ",chars
 
  call ausgabe(chars)
 
  select case chars
 
  case "m"      ' ständig neuen memoryblock anlegen bis Speicher voll
 
    m = MemoryBlock(100)
 
  case "v"
 
    print "m.ByteValue(0)="+str(m.ByteValue(0)) ' aufruf vor zuweisung eines MemoryBlock führt zur Exception
 
  endselect
 
  print "SRAM: "+str(memory.space)+" Bytes frei"
 
  print "--------------------------------------------------------"
 
Loop
 
 
procedure ausgabe(s as string)
 
  print "s = "+s
 
  print "chars = "+chars
 
endproc
 
 
Exception OutOfSpaceMemory
 
  print "*** Exception OutOfSpaceMemory ***"
 
EndException
 
Exception OutOfBoundsMemory
 
  print "*** Exception OutOfBoundsMemory ***"
 
EndException
 
Exception NilObjectException
 
  print "*** Exception NilObjectException ***"
 
EndException
 
 
</pre>
 
 
'''Beispielsource: Blinksteuerung/Blinkmodul Auto & Motorrad'''
 
<pre>
 
'--------------------------------------------------------------
 
' 2010 rgf software
 
'--------------------------------------------------------------
 
' Simple Blinksteuerung für Harley-Armaturen (Taster, kein Schalter)
 
' mit Antippfunktion (nur 3x Blinken bei kurzer Betätigung),
 
' automatischer Rückstellung und Warnblinklicht.
 
'--------------------------------------------------------------
 
 
avr.device = attiny85
 
avr.clock = 8000000
 
 
dim i,blinkmode,BlinkCount,KurzBlinken,LastPressed as byte
 
dim tcount,ticks,t as integer
 
 
const TasterState = 0
 
const DauerBlinkZeit = 300
 
 
portb.1.mode = Output, pulldown
 
portb.2.mode = Output, pulldown
 
portb.4.mode = Input, pulldown
 
portb.5.mode = Input, pulldown
 
 
Timer0.clock = 1024
 
Timer0.isr = BlinkTimer
 
Timer0.Enable
 
 
avr.interrupts.enable
 
 
 
define TasterLinks as PINB.4
 
define TasterRechts as PINB.3
 
define BlinkerLinks as PORTB.1
 
define BlinkerRechts as PORTB.2
 
 
do
 
  if TasterLinks = TasterState then
 
    waitms 25                                  ' debounce
 
    if TasterLinks = TasterState then
 
      if blinkmode > 0 then
 
        call BlinkerOff
 
      else
 
        blinkmode = 1
 
        KurzBlinken = 1
 
        BlinkCount = 0
 
        tcount = 0
 
        call BlinkerToggle
 
        waitms DauerBlinkZeit
 
        if TasterLinks = TasterState then      ' prüfen ob Taster immernoch gedrückt
 
          KurzBlinken = 0
 
        end if
 
        if TasterRechts = TasterState then
 
          waitms 25                            ' debounce
 
          if TasterRechts = TasterState then  ' Beide gedrückt?
 
            call BlinkerOff
 
            blinkmode = 3
 
            KurzBlinken = 0
 
          end if
 
        end if
 
      end if
 
      call TasterWait
 
    end if
 
  end if
 
 
  if TasterRechts = TasterState then
 
    waitms 25                                ' debounce
 
    if TasterRechts = TasterState then
 
      if blinkmode > 0 then
 
        call BlinkerOff
 
      else
 
        blinkmode = 2
 
        KurzBlinken = 1
 
        BlinkCount = 0
 
        tcount = 0
 
        call BlinkerToggle
 
        waitms DauerBlinkZeit
 
        if TasterRechts = TasterState then    ' prüfen ob Taster immernoch gedrückt
 
          KurzBlinken = 0
 
        end if
 
        if TasterLinks = TasterState then
 
          waitms 25                          ' debounce
 
          if TasterLinks = TasterState then  ' Beide gedrückt?
 
            call BlinkerOff
 
            blinkmode = 3
 
            KurzBlinken = 0
 
          end if
 
        end if
 
      end if
 
      call TasterWait
 
    end if
 
  end if
 
 
loop
 
 
label TasterWait
 
  do
 
    waitms 25
 
  loop until TasterLinks = 1 and TasterRechts = 1
 
endlabel
 
 
isr BlinkTimer
 
  incr tcount
 
  if tcount = 12 then                                      ' 1,5 Hz
 
    call BlinkerToggle
 
    tcount = 0
 
    incr BlinkCount
 
    if KurzBlinken = 1 and BlinkCount >= 6 then            ' 3 x blinken und aus
 
      call BlinkerOff
 
    elseif BlinkCount >= 200 then                          ' 100 x blinken und aus (wenn vergessen automatische Rückstellung)
 
      if blinkmode < 3 then
 
        call BlinkerOff
 
      end if
 
    end if
 
  end if
 
endisr
 
 
label BlinkerOff
 
  blinkmode = 0
 
  BlinkerLinks = 0
 
  BlinkerRechts = 0
 
endlabel
 
 
label BlinkerToggle
 
  if blinkmode=1 or blinkmode=3 then
 
    toggle BlinkerLinks
 
  end if
 
  if blinkmode=2 or blinkmode=3 then
 
    toggle BlinkerRechts
 
  end if
 
endlabel
 
 
</pre>
 
</pre>

Aktuelle Version vom 3. Dezember 2012, 13:32 Uhr

LunaAVR

Luna-IDE
Disassembler
LCD-Zeichenditor
GLCD-Pictureeditor
GLCD-Fonteditor

Luna ist eine objektbasierte, moderne Basic- oder Pascal-ähnliche Programmiersprache, deren Aufbau und Syntax sich an aktuellen Entwicklungswerkzeugen orientiert. Sie ist mit einer durchdachten und verständlichen Syntax ausgestattet, bietet jedoch im Gegensatz zu einfacheren Basic-Sprachen wie z.Bsp. BASCOM, wesentlich komplexere Möglichkeiten auf technischer Augenhöhe mit Pascal und C/C++. Sie eignet sich damit für die effiziente und zeitsparende Entwicklung von kleinen bis hin zu großen, anspruchsvollen Softwareprojekten für AVR Mikrocontroller.

Luna besteht aus integrierter Entwicklungsumgebung, einem Präprozessor, Compiler und Assembler. Software kann wahlweise in der IDE oder in einem normalen Texteditor geschrieben werden.

Die IDE bietet hierbei zusätzlich zu den allgemein wünschenswerten Funktionen wie Syntaxfärbung, automatischer Einrückung, Strukturierung von Bedingungen inklusive Ein- und Ausklappfunktion, eine direkte Unterstützung der in Luna abgebildeten Hardware und Software-Objekte bzw. -Klassen der einzelnen AVR Controller. Zusätzlich sind ein Bibliothekseditor, Verzeichnis der Controller-Defines und weitere nützliche Werkzeuge vorhanden.

Das erzeugte Binary und die Ausführungsgeschwindigkeit sind von der Größe her vergleichbar mit existierenden Hochsprachen wie z.Bsp. C/C++. Es gibt keine Beschränkung bei der Tiefe von Ausdrücken wie z.Bsp. in BASCOM. Zudem bietet es eine hochoptimierte dynamische Speicherverwaltung (dynamische Strings oder Speicherblöcke), Speicherstrukturen, dynamische Objekte, selbst erstellbare Klassen und Datenstrukturen.

Die AVR-spezifischen Code-Teile sind quelloffen und vollständig in Assembler geschrieben.

Status des Projekts

Luna bietet eine vollwertige, kostenlose Entwicklungsumgebung mit Compiler, Präprozessor, Assembler und Disassembler. Zusätzlich ist ein Library-Browser/Editor integriert, mit dem man die Standardbbliotheksfunktionen des Compilers einsehen und editieren kann (Assembler). Luna ist zudem für Windows, Linux und Mac-OS verfügbar.

Es sind sehr umfangreiche Befehle und Funktionen zur Stringmanipulation, Speicherverwaltung, Bitmanipulation, Arithmetik (inklusive einer Fließkommaarithmetik) uvm. implementiert.

Der Befehlssatz von Luna

Aufbau und Struktur

Luna ist eine objektbasierte Programmiersprache.

Im Unterschied zur „normalen“ rein prozeduralen Programmierung, sind bei der objektbasierten/objektorientierten Programmierung sogutwie alle Elemente der Programmiersprache in bestimmte Strukturen zusammengefasst. Diese Struktur beeinflusst auch die Art und Weise der Syntax, also wie man eine gewünschte Funktionalität schriftlich ausdrückt.

Jeder AVR-Mikrocontroller ist intern als eine sogenannte „Klasse“ (die Basisklasse) implementiert. Diese beschreibt, welche Objekte (z.Bsp.: Ports, Timer, Wandler, Schnittstellen, ..) und Eigenschaften (Größe des Arbeitsspeichers, Eeprom-Größe, Taktrate, Baudrate, ..) der Controller besitzt. Die davon abgebildeten Objekte erben die Eigenschaften bzw. Attribute dieser Basisklasse, sodass beispielsweise bestimmte Methoden und Eigenschaften nur dann zugänglich sind, wenn sie in der übergeordneten Klasse (in diesem Fall der Controller) vorhanden sind.

Luna unterstützt Klassen, womit Module und in sich geschlossene Codebereiche erstellt werden können.

Weblinks

BeispielSource: helloworld.luna

avr.device = attiny2313
avr.clock = 20000000         ' Quarzfrequenz
avr.stack = 16               ' Bytes Programmstack (Vorgabe: 16)

uart.baud = 19200            ' Baudrate
uart.Recv.enable             ' Senden aktivieren
uart.Send.enable             ' Empfangen aktivieren

print "Hallo Welt"

Do
Loop

LiFePO4 Speicher Test