- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: GCC erzeugt unlogischen Code

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161
    Anzeige

    Praxistest und DIY Projekte
    Tolle Tips, ich bin euch echt dankbar.

    adc r25,1 brauche ich nicht, weil der davor stehende adiw Befehl 16 Bit incrementiert.

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161
    Was das so gemeint, oder kann ich noch weiter optimieren?:
    Code:
    void __attribute__ ((naked)) TIMER0_COMP_vect (void)
    {
       __asm__ __volatile (
          "push r0"            "\n\t"
          "in r0,__SREG__"     "\n\t"  // Sichere SREG in r0
          "dec r2"             "\n\t"  // --prescaler
          "brne return"        "\n\t"  // if (prescaler!=0) goto return:
              "push r24"       "\n\t"
              "sec"            "\n\t"  // system_time++
              "lds r24,%0"     "\n\t" 
              "adc r24,r2"     "\n\t"
              "sts %0,r24"     "\n\t"
              "lds r24,%0+1"   "\n\t"
              "adc r24,r2"     "\n\t"
              "sts %0+1,r24"   "\n\t"
              "lds r24,%0+2"   "\n\t"
              "adc r24,r2"     "\n\t"
              "sts %0+2,r24"   "\n\t"
              "lds r24,%0+3"   "\n\t"
              "adc r24,r2"     "\n\t"
              "sts %0+3,r24"   "\n\t"
              "ldi  r24,75"    "\n\t"  // prescaler=75
              "mov  r2,r24"    "\n\t"
              "pop r24"        "\n\t"
          "return:"            "\n\t"
          "out __SREG__,r0"    "\n\t"
          "pop r0"             "\n\t"
          "reti"               "\n\t"
          :: "i" (&system_time)
       );
    }

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161
    Sorry, ich muss mich einfach nochmal dazu melden: Ich freue mir gerade einen Ast ab, wie toll wir diesen Code optimiert haben. Genau da wollte hin. Supidupi, lasst uns einen Trinken gehen.

  4. #14
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Einer geht noch:

    Man kann das hochzählen noch mit hilfe der Befehle SUBI ...,FF und SBCI...,FF machen. Also sozusagen -1 abziehen statt einen dazuzählen. Das spart dann noch das SEC.

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161
    Dankeschön, ich bin für eure Hilfe dankbar. So macht das Basteln Spaß.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress