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
Warum willst du das machen? In C verwaltet der Compiler die Speicherorte von Variablen, da hast du nix mit am Hut.
Also ich bin mir nicht sicher, ob das das ist, was du willst:
1 | 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.
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.
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
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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.