Modul Beispiel-Methode 1

Zwei Parameter mit Rückgabewert.

  1. Öffnen sie das zuvor erstelle Modul „mymodule.module“ im Bibliothekseditor.
  2. Rechtsklicken sie auf „mymodul“ in der Liste links und erstellen sie eine neue Methode. Es erscheint eine neue Methode „Namenlos“ (Dokumentsymbol mit grüner Markierung).
  3. Durch das Anklicken der Methode (A) erscheint rechts der Methodeneditor.
  4. Klicken sie auf den Pfeile (B) links vom Symbol/Namen um den Parametereditor zu öffnen.
  5. Ändern sie Name auf myAdd, fügen sie zwei Parameter hinzu, Ändern sie das Ziel des Ersten Parameter auf regA und wählen sie unter Verhalten den Eintrag Wert-Rückgabe.
  6. Klappen sie den Parameter-Editor wieder zu mit Pfeilen oben links (B).
  7. Speichern sie die Änderungen mit Strg-S oder durch den entsprechenden Menüpunkt im Menü „Datei“.
  8. Unter „Erwartetes Label“ Zeigt der Methodeneditor das vom Compiler erwartete Assembler-Label der Methode an.
  9. Fügen sie folgenden Code in das Editierfeld ein und speichern sie die Änderungen
_MyAdd:
  ;first parameter is stored in register _HA0 by the compiler at call
  PopPC	                ;pop the method's return address from the stack
  pop    _HB0            ;pop the second parameter from the stack
  PushPC                ;push the methotd's return address back to the stack
 
  add    _HA0,_HB0       ;add both parameter, result in _HA0
  ret                   ;result already in register _HA0

Ab sofort können sie nun das Modul und die Methode myAdd() in ihrem Luna-Code nutzen. Nach einem Neustart der IDE wird diese auch im Luna-Quelltext farblich hervorgehoben. Im Parameter-Editor der Methode haben sie die Möglichkeit zu wählen, ob man im Luna-Code den Modulnamen mit angeben muss oder nicht (siehe hier, Absatz "Modul")

Testen sie die Methode. Sie addiert zwei Byte-Werte zu einem Byte-Wert.

avr.device = atmega328p
avr.clock = 20000000
avr.stack = 64
 
uart0.baud = 19200		'baud rate
uart0.Recv.enable		'enable receive
uart0.Send.enable		'enable send
 
#library "library/custom/mymodule.module"
 
 
print "myAdd() = ";str(myAdd(23,42))
 
 
halt()