|
AvrTerse V1.03 (Bugfixed) Ein Stark erweiterter Makro
Assembler mit hochsprachenähnlichen Konstrukten für Avr 8 Bit Risc
Prozessoren. Neuigkeiten zu AvrTerse erfahrt Ihr auf: www.elektronikseiten.de/avrterse |
||||||||||||||
| Click here for an english version of the page | ||||||||||||||
| Index | ||||||||||||||
|
||||||||||||||
| ^ | Was ist AvrTerse? | |||||||||||||
| AvrTerse ist eine prozessorabhängige Programmiersprache
für die komplette Atmel 8 Bit Avr Risc Prozessor Reihe (z.B. AT90S1200,
ATmega103, ...). Man behält, wie in jeder anderen Assemblersprache, die
komplette Kontrolle über den Prozessor, ohne jedoch die
Übersichtlichkeit so leicht zu verlieren. Dies wird durch eine
Hochsprachenähnliche Syntax ermöglicht, die jedoch nicht unbedingt
angewendet werden muß.
Da AvrTerse kompatibel zum Standard AvrAsm Assembler von Atmel ist, bleibt jedem die Option auch weiterhin offen, normalen AvrAsm Code zu schreiben.
|
||||||||||||||
| ^ | Wozu brauche ich AvrTerse? | |||||||||||||
| Gerade bei großen
Assemblerprojekten, die bei den "größeren" Avr-Prozessoren von
Atmel schon mal schnell entstehen können, verliert man ziemlich leicht
die Übersichtlichkeit. Abhilfe kann z.B. ein Hochsprachencompiler (C,
Pascal, Basic) schaffen. Braucht man aber effiziente Routinen (sowohl
Code- als auch Zeiteffizient), ist man auf Assembler angewiesen.
AvrTerse ist der ideale Kompromiss zwischen Assemblernaher Programmierung und Übersichtlichkeit. Eine "etwas" höhere Sprache als Assembler, die jedoch nicht wie Hochsprachen zu sehr von dieser Ebene abstrahiert. Man denkt immer noch auf Registerlevel.
|
||||||||||||||
| ^ | Lizenz | |||||||||||||
| AvrTerse ist Freeware,
das heißt es darf kostenlos eingesetzt und weitergegeben werden, jedoch
nur komplett und unverändert!
Solltet Ihr mit AvrTerse ein Projekt realisiert haben, erstellt bitte einen Link in den evtl. vorhandenen Internetseiten auf diese AvrTerse Seite! Generell würde ich mich über eine Mail freuen, wie Ihr AvrTerse findet, wofür Ihr es einsetzt, oder ob Ihr Fehler gefunden habt. Nur so kann eine Weiterentwicklung meinerseits realisiert werden, denn wofür sollte ich etwas weiterentwickeln von dem ich den Eindruck habe, daß es niemand benutzt?!
|
||||||||||||||
| ^ | Download | |||||||||||||
| Die aktuelle Version
von AvrTerse könnt ihr hier: AvrTerse.zip
downloaden.
Das Archiv beinhaltet folgende Dateien:
|
||||||||||||||
| ^ | Installation von AvrTerse | |||||||||||||
| AvrTerse läßt sich
direkt in AvrStudio einsetzen. Da es ein AvrStudio kompatibles Object file
erzeugt, empfiehlt es sich auch stark es direkt in AvrStudio einzubinden.
So ist ein einfaches simulieren von Code schnell und einfach möglich.
Die permanente: Möchte man es dauerhaft
austauschen, löscht man avrasm32.exe aus dem Programmverzeichnis und
benennt Die projektbezogene: Man öffnet ein
bestehendes Projekt, oder erstellt ein neues. Unter dem Menüpunkt
"Project -> Projectsettings" von AvrStudio läßt sich der
Assembler auswählen. Einfach
|
||||||||||||||
| ^ | Erweiterungen zu Atmels AvrAsm | |||||||||||||
| Generell kann man
davon ausgehen, daß AvrAsm Code von AvrTerse assembliert werden kann. Bei
der Entwicklung von AvrTerse war das ein mir sehr wichtiger Punkt, da es
viel fertigen Code für die Avr Prozessoren gibt (z.B. Application notes). Bisher sind mir keine nicht compilierbaren Sourcecodes in die Hände gekommen, ich möchte jedoch nicht generell ausschließen, daß es solche gibt.
|
||||||||||||||
| Direktiven | ||||||||||||||
| ^ | Die .count Direktive | |||||||||||||
.count <n>
<befehle> wird <n> mal hintereinander compiliert.
|
||||||||||||||
| ^ | Die .echo Direktive <neu ab Version 1.01> | |||||||||||||
.echo <Parameter> [,
<Parameter> [, ...]]Die Parameter werden vom Assembler während der Assemblierung ausgegeben. So lassen sich Debug Meldungen einfach anzeigen. Ausgegeben werden können Strings, Konstanten, Ausdrücke, Def- und Equ-Bezeichner und Register.
|
||||||||||||||
| ^ | Die .if / .else / .endif Direktive | |||||||||||||
.if <n>
Ist die Konstante <n> True (!= 0), werden nur der Bereich <Befehle1> compiliert. Ist <n> False (== 0), wird der Bereich <Befehle2> compiliert. Ist keine else-Direktive vorhanden, so wird überhaupt kein code erzeugt!
|
||||||||||||||
| ^ | Die .macro / .endmacro Direktive | |||||||||||||
.macro <name>
Ein Makro darf in AvrTerse, im Gegensatz zu dem Standard AvrAsm auch andere Makros aufrufen, also rekursiv arbeiten.
|
||||||||||||||
| ^ | Die .memmap Direktive <neu ab Version 1.01> | |||||||||||||
.memmapZeigt nach der Assemblierung eine kurze Tabelle mit Informationen zu belegten und unbelegten Speicherbereichen des Zielprozessors an. Außerdem wird angezeigt, wie viele words Flash-Speicher frei sind.
|
||||||||||||||
| Konstrukte | ||||||||||||||
| Algrebraische Konstrukte | ||||||||||||||
| ^ | Rechts-assoziative unäre Operationen | |||||||||||||
<register> <operator> [C]
Führt die durch <Operator> bestimmte unäre Berechnung durch. Steht ein C hinter <Operator> so wird eine zu <Operator> äquivaltente Berechnung, die das Carry Bit berücksichtigt durchgeführt:
|
||||||||||||||
| ^ | Links-assoziative unäre Operationen | |||||||||||||
|
||||||||||||||
| ^ | Binäre Operationen | |||||||||||||
<register> <operator> [C]
<Register/Konstante>
Führt die durch <Operator> bestimmte binäre Berechnung durch. Steht ein C hinter <Operator> so wird eine zu <Operator> äquivaltente Berechnung, die das Carry Bit berücksichtigt durchgeführt.
|
||||||||||||||
| ^ | Port-Zuweisung von Registerinhalten | |||||||||||||
IOP(<portnummer>) = <register>
Dem Port <portnummer> wird der Inhalt von <register> zugewiesen.
|
||||||||||||||
| ^ | Register-Zuweisung von Portinhalten | |||||||||||||
<register> = IOP(<portnummer>)
Der Inhalt von <portnummer> wird dem Inhalt von Port <register> zugewiesen.
|
||||||||||||||
| ^ | Bitänderungen von Registern | |||||||||||||
<register>.<bitnummer> = <n>
Setzt Bit <bitnummer> von <register> auf den Wert <n>
|
||||||||||||||
| Kontrollstrukturen | ||||||||||||||
| ^ | Bitabhängige Codeausführung | |||||||||||||
<register>.<bitnummer> == <n> {
Entspricht der Zustand von Bit <bitnummer> von <register>,
bzw. <portnummer> dem Wert <n>, wird der Befehl ausgeführt. Sonst wird er übersprungen.
|
||||||||||||||
| ^ | If Then Else Konstrukt | |||||||||||||
<vergleichsoperator> {
Ist durch einen vorgehenden Vergleich die durch den Vergleichsoperator ausgedrückte Bedingung wahr, so wird <befehle1> ausgeführt, sonst, <befehle2>
|
||||||||||||||
| ^ | Postchecked While Konstrukt | |||||||||||||
{
Führt <befehle> mindestens einmal aus. Ist die Bedinung <vergleichsoperator> erfüllt, wird <befehle> wiederum ausgeführt.
|
||||||||||||||
| ^ | Aufrufparameter von AvrTerse | |||||||||||||
| AvrTerse ist ein Kommandozeilen
Assembler, wie auch AvrAsm. Um die Kompatibilität zu bewahren, sind auch
die Aufrufparameter des Assemblers sehr ähnlich:
Beispiel:
|
||||||||||||||
| ^ | Versionsgeschichte | |||||||||||||
|
||||||||||||||
| ^ | Bekannte Fehler | |||||||||||||
| Bisher sind noch keine
wirklichen Fehler bekannt, wenn man mal von den noch ziemlich schlecht
formulierten Fehlermeldungen absieht.
AvrTerse braucht ungefähr 3 mal so lange wie AvrAsm, um ein File zu assemblieren. Das wird jedoch in einer der nächsten Versionen ändern!
|
||||||||||||||
| ^ | Kontakt | |||||||||||||
| Habt Ihr irgendwelche Fehler in
AvrTerse gefunden, vermisst irgendein Feature, habt Fragen zu AvrTerse,
oder wollt Beispielcode haben, könnt Ihr mir an:
eine Mail schicken. Generell lohnt sich sicherlich auch mal ein Besuch von www.Elektronikseiten.de Das war jetzt genug Werbung fürs erste ;-)
|
||||||||||||||
| ^ | Copyright-Anmerkungen | |||||||||||||
| Copyright 2001 Kai Gossner.
Co-copyright Besitzer ist Jim Neil als Erfinder von Terse für x86
Plattformen.
Terse (tm) ist ein eingetragenes Markenzeichen von Jim Neil. Sein Terse hat mich zur Entwicklung von AvrTerse inspiriert. Schaut euch doch einfach mal seine Seite an: www.terse.com Andere hier genannte Produkt und Firmennamen können ebenfalls Markenzeichen ihrer jeweiligen Inhaber sein.
|
||||||||||||||