- LiFePO4 Speicher Test         
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

    E-Bike
    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