www.mikrocontroller.net

Forum: Compiler & IDEs Label Zuweisung für Register xy in C unter GCC


Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
arbeite an einem Projekt mit mega8 in C unter GCC
Die Variablen mochte ich gerne den Register 1 bis 24 zuweisen.
Ein Beispiel in Assember
.def   Zaehler  =  r25
Wie mache ich dieses in C ?
Gruß Siegfried

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum willst du das machen? In C verwaltet der Compiler die Speicherorte 
von Variablen, da hast du nix mit am Hut.

Autor: Markus E. (engelmarkus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich bin mir nicht sicher, ob das das ist, was du willst:
register unsigned char zaehler asm("r3");

Allerdings darfst du das nur mit den Registern r2-r7 machen, die anderen 
werden von GCC z. B. für die Parameter-Übergabe verwendet.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siegfried Saueressig schrieb:

> Wie mache ich dieses in C ?

Das machst du vorzugsweise überhaupt nicht.

Rein technisch ist es möglich, wie grad beschrieben, aber das sollte man 
allenfalls machen, wenn man schon ein paar Jahre drinsteckt. Das Risiko, 
dass man sich dabei eine Zeitbombe einhandelt, ist erheblich. Auch diese 
r2-r7 sind nämlich keineswegs frei.

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Vorab mochte ich sagen, das ich mit " GCC" noch nicht gearbeitet habe.

Die Variable "zaehler" ist im SRAM an Adresse 0x008A angelegt.
Habe mir ein Teil im Disassembler angesehen. Dort finde ich immer wieder 
die Ragister 0, 1, 24, 25 die der Compiler benutzt.

Hier ein paar Zeilen aus dem disassember
217:      zaehler ++;
+0000035F:   9180008A  LDS     R24,0x008A       Load direct from data 
space
+00000361:   5F8F      SUBI    R24,0xFF         Subtract immediate
+00000362:   9380008A  STS     0x008A,R24       Store direct to data 
space

Wie hier zu sehen ist, macht der Compiler 3 Befehle für eine einfache 
erhöhung einer Variable. es würde doch reichen mit diesem "inc" Befehl.

Ich hoffe, das ich hier keinen Unsinn schreibe.

Gruß Siegfried

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass dem Compiler was des Compilers ist. Ohne Erfahrung mit dem Compiler 
schaufelst du dir bei solchen Versuchen nur dein eigenes Grab.

Hast du mit diesem Code ästhetische Problem oder bist du wirklich bei 
der Performance am Limit?

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.