- Labornetzteil AliExpress         
Ergebnis 1 bis 7 von 7

Thema: Compiler streikt bei char!?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    14.07.2004
    Alter
    34
    Beiträge
    37

    Compiler streikt bei char!?

    Anzeige

    Powerstation Test
    Ich wollte diese Wait Methode optimieren indem ich int x; durch unsigned char x; ersetzt habe.
    Code:
    void Wait(unsigned char time)
    {
    int x;
    for (x = 0; x < time; x++);
    }
    
    Wait(100);
    Code:
    void Wait(unsigned char time)
    {
    unsigned char x;
    for (x = 0; x < time; x++);
    }
    
    Wait(100);
    Der Parameter von Wait überschreitet 100 nicht.

    Nach der Wait Methode wird ein Wert an ein LCD Display ausgegeben.
    Mit int funktioniert das Display mit unsigned char nicht!!!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    40
    Beiträge
    614
    Bist du sicher, dass die Warteschleife danach nicht mehr geht? Vielleicht ist sie durch deine Optimierung nur schneller geworden.
    Wenn du fertige Warteschleifen suchst, guck' mal in die Delay.h (bei AVR-GCC). Da sind welche drin, bei denen du dir genau ausrechnen kannst, wie lange sie warten(bei deinen C-Schleifen kannst du nur nachmessen oder dir den compilierten Code angucken, was wohl aufwändiger ist, als die gleich in ASM zu schreiben.).
    it works best if you plug it (aus leidvoller Erfahrung)

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    14.07.2004
    Alter
    34
    Beiträge
    37
    Die Schleife wird schon schneller, aber wahrscheinlich nicht doppelt so schnell, oder???
    Ich hab jetzt auch Wait(200); getestet.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    40
    Beiträge
    614
    Ich kann mir schon vorstellen, dass die Schleife(zumindest) doppelt so schnell wird(schließlich ist der AVR ein 8bit-Controller, der Chars in einem Takt vergleichen kann.).
    Kannst du die Dauer des Schleifendurchlaufs(oder auch von 100 oder 1000 Durchläufen) messen(und wenn nicht, wie bist du überhaupt auf die vorherige Schleife gekommen? Ausprobieren? )?
    it works best if you plug it (aus leidvoller Erfahrung)

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    14.07.2004
    Alter
    34
    Beiträge
    37
    Zitat Zitat von Gottfreak
    Ich kann mir schon vorstellen, dass die Schleife(zumindest) doppelt so schnell wird(schließlich ist der AVR ein 8bit-Controller, der Chars in einem Takt vergleichen kann.).
    Kannst du die Dauer des Schleifendurchlaufs(oder auch von 100 oder 1000 Durchläufen) messen(und wenn nicht, wie bist du überhaupt auf die vorherige Schleife gekommen? Ausprobieren? )?
    Ich hab eine Schleife gemacht und bei 95 hat es nicht mehr funktioniert. Als Toleranz 5 und fertisch

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Probiers mal mit :

    volatile unsigned char x;

    Ansonsten könnte dir der Compiler bei entsprecher Einstellung die Schleife einfach "wegoptimieren".
    ( Schau dir doch einfach mal das Assemblerlisting an, da kann man das sehr schön sehen )

    MfG Kjion

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    14.07.2004
    Alter
    34
    Beiträge
    37
    Ich hab im makefile Optimierung auf 0 eingestellt.
    Würde er die, wenn ich Optimierung verwenden würde, nicht auch wegoptmieren, wenn es eine intiger Variable wäre.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad