WinAVR optimiert Rückzuweisung an globale RAM-Zelle weg!

Gast #348429
Lesenswert?
• ▲
▼
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?
Gast #348432
Lesenswert?
• ▲
▼
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.
#348434
Lesenswert?
• ▲
▼
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.