-Os optimiert wichtigen Code weg

Gast #362953
Lesenswert?
• ▲
▼
Hi Leute,

ich habe gcc (3.4.4)  mal auf die Option -Os eingestellt, um Speicher
zu sparen. Nun bin ich auf ein Phänomen gestoßen. Ich habe ein Makro
geschrieben
1
#define
2
activate_emitter()    PORTC&=~((1<<K_1)|(1<<K_2));PORTB&=~(1<<K_4);PORTD&=~(1<<K_3)  //
3
alle IR-Sendedioden einschalten

, das ein paar Portpins ändert. Dieses wird in meinem Programm aber
knallhart wegoptimiert. Gibt es irgendweine Möglichkeit das zu umgehen
und dem Compiler zu sagen, das muss auf jeden Fall mit rein? Oder gibt
es da andere Tricks?

Gruß Willi
Gast #362956
Lesenswert?
• ▲
▼
1
if (state.actual == IDLE)    // Wenn derzeit nichts gemacht wird
2
{  
3
  state.var = 0;        // Hilfsvariable löschen
4
  
5

6
  switch (uart0.in_buffer[0])  // Befehl erkennen
7
  {        
8
    case FOR:                                  
9
      if (increase_count())
10
      {
11
        state.actual = FURL;              
12
        speed_1 = FAST_IN;      // Startgeschwindigkeit
13
        speed_2 = SLOW_IN;
14
        activate_emitter();      // Lichtschranken aktivieren            
15
      }
16
    break;
17

18
    case BACK:              
19
      if (decrease_bill(&bill_counter))
20
      {  
21
        state.actual = UNROLL;      
22
        speed_1 = SLOW_OUT;        // Startgeschwindigkeit
23
        speed_2 = FAST_OUT;
24
        activate_emitter();      // Lichtschranken aktivieren
25
      }
26
    break;
27

28
    #ifdef BUGTRACKING
29
    default:          // keine Anweisung erkannt          
30
      bug.occured = true;    // Fehlerbericht        
31
      bug.code = NO_COMMAND;
32
      deactivate_emitter();  // LS aus
33
    break;  
34
    #endif
35
          
36
  }// switch (uart0.in_buffer[0])
Gast #362957
Lesenswert?
• ▲
▼
Hallo,

Ich hatte ähnliche Probleme.  Software, die mit der alten Version lief,
compiled zwar aber läuft nicht mehr fehlerfrei mit -Os.  Ich habe erst
mal wieder die alte Version installiert und will das Problem
untersuchen.

Reiner
Gast #362958
Lesenswert?
• ▲
▼
@Willi

"Dieses wird in meinem Programm aber knallhart wegoptimiert."


Wie hast Du das denn festgestellt ?


Manchmal braucht es ne Weile, bis man durch das Assemblerlisting
durchsteigt.

Daß etwas nicht so dasteht, wie man es erwartet, heißt noch lange
nicht, daß es der Compiler falsch macht.


Bisher habe ich immer gemerkt, daß der Compiler doch recht hatte.


Peter
Gast #362959
Lesenswert?
• ▲
▼
Hallo Peter,

wenn man sich den erzeugten Code im Disassembler anschaut, so tauchen
die Setz-Befehle für die Ports gar nicht auf. Zumal diese wirklich
verändert werden müssen, weil sie vorher mit High initialisert wurden.
Aber vielleicht hast du ja recht, ich werde mir mal den Code genauer
ansehen. Wer weiss, vielleicht hab ich wirklich irgendwo etwas
Unsinniges stehen.

Gruß Willi
#362960
Lesenswert?
• ▲
▼
> Habe jetzt den Code um eine Zeile verschoben und siehe da, er wird
> auf einmal mit reingenommen.

Du hast in Deinem Makro keine Klammerung um den Gesamtausdruck. Das
kann böse Seiteneffekte haben. Ist der Code oben der vor oder nach
Deiner Verschiebe-Änderung?

Was helfen kann: den Code nach dem Precompiler anschauen.

Gruß, Stefan

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.