www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik .def-directive öfters und/oder anders verwenden


Autor: Martin Witt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

in der Praxis hat sich bei mir rausgestellt, daß ich die def-Direktive
öfters verwenden möchte. Folgendes Beispiel:

Ich habe einen Code-Abschnitt, der, sagen wir mal, von 6 Registern
Gebrauch macht. Also definiere ich zugeschnitten auf den Code 6
"Aliase"

Jetz habe ich einen anderen Code-Abschnitt, der sagen wir mal 8
Register benötigt, also wirds langsam eng mit den ganzen
Spezialregister und (R0-R15) usw.

Nachdem ich aber die Register vom ersten Code-Abschnitt momentan nicht
brauche läge es doch nahe, diese einfach umzubennen also auf die neue
Verwendung zuzuschneidern.

Ich habe es ausprobiert, und der Compiler kann scheinbar mit dem
Umbennen leben.

In größerem Code mit Sprüngen wirds aber unübersichtlich und unter
Umständen sogar Problematisch. Jetzt würde ich also gerne die
"Aliase" löschen und sozusagen onDemand wieder neu vergeben, damit
der Asembler meckert und mich aufmerksam macht. Mit der Performance
dürfte es ja keine Probleme geben, da der Proz ja sowieso mit den
Registern arbeitet.

Gibt es einen Befehl der ein "Alias" löscht?

Wie macht Ihr das?

Grüße

Martin

Autor: Dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine .def steht... das is halt assembler: du musst wissen, was du
machst. woher soll der assembler denn wissen, dass er genau zu der zeit
in die routine springt und flutsch genau die register überschreibt..
damit wäre der sinn von assembler eigentlich gegessen.

ich versuche natürlich für alle dinge, die auf längere zeit gespeichert
werden sollen, ein low-register zu nehmen. falls z.b. nen pointer
register gebraucht wird, muss natürlich der wert am anfang der routine
neu geladen werden.
am anfang denkt man: 32 register :) da brauch ich nur 1 g aber man
merkts später dann... da bleibt dir immernoch "sts [ramzelle], rXX"
haut dir nen register an eine festgelegte stelle im ram.. für daten,
die nicht sooo oft gebraucht werden, die beste lösung.. "lds rXX,
ramzelle" läd entsprechend zurück. damit spart man viele register.

dave

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du merkst, das ein Uunterprogramm Register verwendet die auch wo
anders verwendet werden sicher deren Inhalt am Anfang des UP mit PUSH
auf den Stapel, z. B. "PUSH Temp3", und am Ende des UP holst Du den
alten Inhalt des Register mit z. B. "POP Temp3" wieder zurück.
Da brauchst Du Dir dann keine Sorgen zu machen.
Geht natürlich nur, wenn es ein µC mit SRAM ist.

Gruß
Andi

Autor: condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo
du kanst einem register auch 2 - 3 nahmen geben z.b.

.def test1 = r16
.def temp = r16
.def status = r16

alles landet im r16

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.