Präprozessor - Assembler
Der im Luna-Assembler eingebaute Präprozessor ist ein sog. Makroprozessor.
Im Präprozessor werden folgende Teilbereiche bearbeitet:
- Auflösung von arithmetischen und logischen Ausdrücken mit Konstanten.
- Bedingte Einbindung von Code-Bereichen.
- Einbinden von externen Sourcedateien und -Daten
- Textersetzungen von Definitionen im Sourcecode.
- Auflösung von Inline-Funktionen.
- Auflösung von Makros.
Präprozessorfunktionen im Assembler-Code
Anweisungen
- .if .else .elseif .endif - Bedingtes Assemblieren.
- .select .case .default .endselect - Bedingtes Assemblieren.
- .macro .endmacro - Makros.
Command | Description | Example |
---|---|---|
.equ | create a constant | .equ var = 123.45 |
.set | create/assign a constant | .set var = 123.45 |
.def | Alias | .def temp = R16 |
.device | set the avr controller type | .device atmega32 |
.import | import a label | .import _myLabel |
.importClass1) | import avr class. sets all defines and constants of the selected avr controller inclusive .device | .importClass atmega32 |
.importObject2) | import a library object | .importObject Macro_Delay |
.importUsedObjects3) | auto-imports all in the source code used libraries objects | .importUsedObjects |
.cseg | select flash segment | .cseg |
.dseg | select sram segment | .dseg |
.eseg | select eeprom segment | .eseg |
.org | Sets the pointer of the actual active segment to a specific value | .org intVectorSize |
.error | Display a error message. Break compile/assemble. | .error „message“ |
.warning | Display a warning message. | .warning „message“ |
.message, .print | Display a info message without line number and origin. | .message „message“ |
.regisr | register a label to a interrupt vector „on the fly“ (used for Library Code) | .regisr vectorAddress,mylabel |
.db | (byte) 1 byte each value and strings, data block. 4) | .db „hello“,0x3b |
.dw | (word) 2 bytes each value, data block. 5) | .dw 0x3bda,0xcf01 |
.dt | (triple) 3 bytes each value, data block. 6) | .dt 0xf0d1a4 |
.dl | (long) 4 bytes each value, data block. 7) | .dl 0xff01ddca |
.bin | (file) data block from file byte-wise. 8) | .bin „filepath“ |
.odb | (byte) 1 byte each value and strings, object data block | .odb „hello“,0x3b |
.odw | (word) 2 bytes each value, object data block. 9) | .odw 0x3bda,0xcf01 |
.odt | (triple) 3 bytes each value, object data block. 10) | .odt 0xf0d1a4 |
.odl | (long) 4 bytes each value, object data block. 11) | .odl 0xff01ddca |
.obin | (file) data block from file byte-wise. 12) | .obin „filepath“ |
.dobjend | endmark for object data block with .odb, .odw, … 13))) | .dobjend label |
Beispiel für Objekt-Datenblock
classServiceudpdDatagram: .odb "this is a message from the luna udpd server",0x0D,0x0A .odb "build with lavrc version ","2013.r6.7",0x0D,0x0A .odb 0x0D,0x0A .dobjend classServiceudpdDatagram
Funktionen
Die Präprozessorfunktionen können nur mit Konstanten verwendet werden.
Funktionen aus dem Luna-Befehlssatz, abgebildet im Präprozessor.
- byte1() - 1. Byte eines 32-Bit-Wertes
- byte2() - 2. Byte eines 32-Bit-Wertes
- byte3() - 3. Byte eines 32-Bit-Wertes
- byte4() - 4. Byte eines 32-Bit-Wertes
- byte() - Typcasting auf 8-Bit-Integer.
- word() - Typcasting auf 16-Bit-Integer.
- integer() - Typcasting auf 16-Bit-Integer mit Vorzeichen.
- long() - Typcasting auf 32-Bit-Integer.
- longint() - Typcasting auf 32-Bit-Integer mit Vorzeichen.
- int8() - Typcasting auf 8-Bit-Integer mit Vorzeichen.
- int16() - Typcasting auf 16-Bit-Integer mit Vorzeichen.
- int24() - Typcasting auf 24-Bit-Integer mit Vorzeichen.
- int32() - Typcasting auf 32-Bit-Integer mit Vorzeichen.
- uint8() - Typcasting auf 8-Bit-Integer.
- uint16() - Typcasting auf 16-Bit-Integer.
- uint24() - Typcasting auf 24-Bit-Integer.
- uint32() - Typcasting auf 32-Bit-Integer.
- single() - Typcasting auf 32-Bit-Float mit Vorzeichen.
- float() - Typcasting auf 32-Bit-Float mit Vorzeichen.
- odd() - Prüfen ob Wert ungerade.
- even() - Prüfen ob Wert gerade.
- chr() - Umwandlung nach Binärstring (byte).
- mkb() - Umwandlung nach Binärstring (byte).
- mki() - Umwandlung nach Binärstring (integer).
- mkw() - Umwandlung nach Binärstring (word).
- mkl() - Umwandlung nach Binärstring (long).
- mks() - Umwandlung nach Binärstring (single).
- strfill() - String auffüllen mit Zeichenkette.
- hex() - Konvertierung nach Hexadezimaldarstellung.
- str() - Konvertierung nach Dezimaldarstellung.
- bin() - Konvertierung nach Binärdarstellung.
- asc() - Umwandlung des ersten Zeichens einer Zeichenkette in sein numerisches Equivalent.
- min() - Arithmetische Funktion.
- max() - Arithmetische Funktion.
- left() - Linken Teil eines Textes lesen (String).
- right() - Rechten Teil eines Textes lesen (String).
- mid() - Teil eines Textes lesen (String).
- format() - Formatierte, dezimale Zahlendarstellung.
- nthfield() - Teil einer separierten Zeichenkette.
- val() - Zeichenkette mit Dezimalzahl zu Integerwert konvertieren.
Sonderfunktionen, nur im Präprozessor.
- Descriptor() - Aktuellen Deskriptor (Zeiger/Position) des Assemblers lesen (byte-Adresse).
- MakeIdentifier() - Ein Symbol aus einem String erstellen.
- Defined() - Prüfen ob eine Konstante oder ein Symbol definiert ist.
- Replace() - Zeichenkette in einem String suchen und erste Vorkommende ersetzen.
- ReplaceAll() - Zeichenkette in einem String suchen und alle Vorkommenden ersetzen.