Hallo, in einem C-Modul deklariere ich 3 globale RAM-Zellen. Alle 3 RAM-Zellen werden im RAM allokiert. Ich sehe ihre Adressen im Watch Fenster. Eine ist eine reine Eingangsgröße und wird nicht verändert. Die anderen beiden bekommen Werte aus prozeßlokalen (Register)RAM-Zellen zugewiesen. Zu Beginn der lss-Datei werden die RAM-Zellen "lds r30, 0x0076" etc. an die Arbeitsregister zugewiesen. Am Ende des Codes werden die Rechenergebnisse an die Register der "globalen" Variablen zugewiesen. Das Problem ist allerdings jetzt, daß die Inhalte der Register nicht zurück ins RAM geschrieben werden. D.h. daß die RAM-Zellen dauerhaft auf Null bleiben. Ist ja schön, daß der Compiler RAM spart. Aber wie kann ich den Compiler anweisen, daß er die Registerinhalte ins RAM zurückschreibt?
Hmm. Ich werd aus deiner Beschreibung nicht schlau, was du da konkret gemacht hast, bzw. vor hast. Könntest du uns einfach mal den Code zeigen? Falls der zulang ist, könntest du einfach mal ein kurzes Beispiel konstruieren?
Der Code sieht sinngemäß so aus: u8 a,b,c; void main void { while(1) { b = a + 1; c = b; } } Bei voller Optimierung bleiben die berechneten Variable b und c in den Arbeits Registern und werden nicht an ihre RAM Adressen zurückgeschrieben. Ich hätte aber gern die jeweils neu berechneten Werte im RAM.
Sorry. Irrtuemlich auf Return gedrueckt volatile u8 a,b,c; volatile teilt dem Compiler mit, dass er sich mit Optimierungen auf dieser Variable zurückhalten soll, da es Zugriffe gibt, bzw. diese Variablen ihre Werte ändern, die für den Compiler nicht detektierbar sind. zb. eine Uhr die memory mapped betrieben wird: Die Speicherzellen ändern ihre Werte, ohne das das für den Compiler in irgendeiner Art und Weise ersichtlich ist. Du hast den umgekehrten Fall.
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.